OBJECT_ID (Transact-SQL)
Gilt für: SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Gibt die Datenbankobjekt-ID eines Objekts mit Schemabereich zurück.
Objekte, die nicht schemabereichsgesteuert sind, z. B. DDL-Trigger (Data Definition Language), können nicht mithilfe OBJECT_ID
von Abfragen abgefragt werden. Rufen Sie für Objekte, die in der Katalogansicht "sys.objects " nicht gefunden werden, die Objektidentifikationsnummern ab, indem Sie die entsprechende Katalogansicht abfragen. Verwenden Sie z.B. SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'
, um die Objekt-ID eines DDL-Triggers zurückzugeben.
Transact-SQL-Syntaxkonventionen
Syntax
OBJECT_ID ( ' [ database_name . [ schema_name ] . | schema_name . ]
object_name' [ , 'object_type' ] )
Hinweis
Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.
Argumente
N'object_name'
Das zu verwendende Objekt. object_name entspricht entweder dem Typ varchar oder nvarchar. Ein Varcharwert von object_name wird implizit in nvarchar konvertiert. Die Angabe des Datenbank- und des Schemanamens ist optional.
N'object_type'
Der Objekttyp mit Schemabereich. object_type entspricht entweder dem Typ varchar oder nvarchar. Ein Varcharwert von object_type wird implizit in nvarchar konvertiert. Eine Liste der Objekttypen finden Sie in der Spalte Typ unter sys.objects (Transact-SQL).
Rückgabetypen
int
Ausnahmen
Gibt für einen räumlichen Index OBJECT_ID
zurück NULL
.
Gibt NULL
den Fehler zurück.
Ein Benutzer kann nur die Metadaten von sicherungsfähigen Daten anzeigen, die der Benutzer besitzt oder für die der Benutzer die Berechtigung erteilt hat. Dies bedeutet, dass metadatenmittierende, integrierte Funktionen wie OBJECT_ID
z. B. zurückgegeben NULL
werden können, wenn der Benutzer keine Berechtigung für das Objekt besitzt. Weitere Informationen finden Sie unter Metadata Visibility Configuration.
Bemerkungen
Wenn der Parameter für eine Systemfunktion optional ist, wird von der aktuellen Datenbank, dem aktuellen Hostcomputer, dem aktuellen Serverbenutzer oder dem aktuellen Datenbankbenutzer ausgegangen. Sie müssen immer integrierte Funktionen mit Klammern befolgen.
Wenn ein temporärer Tabellenname angegeben wird, muss der Datenbankname vor dem temporären Tabellennamen stehen, es sei denn, die aktuelle Datenbank ist tempdb
. Zum Beispiel:
SELECT OBJECT_ID('tempdb..#mytemptable');
Systemfunktionen können in der Auswahlliste, in der Klausel und an einer beliebigen Stelle verwendet werden, an der WHERE
ein Ausdruck zulässig ist. Weitere Informationen finden Sie unter Ausdrücke (Transact-SQL) und unter WHERE (Transact-SQL).
Beispiele
Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022
- oder AdventureWorksDW2022
-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.
A. Zurückgeben der Objekt-ID für ein angegebenes Objekt
Das folgende Beispiel gibt die Objekt-ID für die Production.WorkOrder
-Tabelle in der AdventureWorks2022
-Datenbank zurück.
USE master;
GO
SELECT OBJECT_ID(N'AdventureWorks2022.Production.WorkOrder') AS 'Object ID';
GO
B. Überprüfen, ob ein Objekt vorhanden ist
Das folgende Beispiel überprüft das Vorhandensein einer angegebenen Tabelle, indem überprüft wird, ob die Tabelle eine Objekt-ID besitzt. Wenn die Tabelle vorhanden ist, wird sie gelöscht. Wenn die Tabelle nicht vorhanden ist, wird die DROP TABLE
Anweisung nicht ausgeführt.
USE AdventureWorks2022;
GO
IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL
DROP TABLE dbo.AWBuildVersion;
GO
C. Verwenden von OBJECT_ID zum Angeben des Werts eines Systemfunktionsparameters
Im folgenden Beispiel werden Informationen zu allen Indizes und Partitionen der Person.Address
-Tabelle in der AdventureWorks2022
-Datenbank zurückgegeben. Dazu wird die sys.dm_db_index_operational_stats-Funktion verwendet.
Hinweis
Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.
Wenn Sie die Transact-SQL-Funktionen DB_ID
verwenden und OBJECT_ID
einen Parameterwert zurückgeben, stellen Sie immer sicher, dass eine gültige ID zurückgegeben wird. Wenn der Datenbank- oder Objektname nicht gefunden werden kann, z. B. wenn sie nicht vorhanden sind oder falsch geschrieben sind, werden beide Funktionen zurückgegeben NULL
. Die sys.dm_db_index_operational_stats
Funktion wird als Wildcardwert interpretiert NULL
, der alle Datenbanken oder alle Objekte angibt. Da dieser Vorgang unbeabsichtigt sein kann, veranschaulicht das Beispiel in diesem Abschnitt die sichere Methode zum Ermitteln von Datenbank- und Objekt-IDs.
DECLARE @db_id INT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.Person.Address');
IF @db_id IS NULL
BEGIN
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN
PRINT N'Invalid object';
END;
ELSE
BEGIN
SELECT *
FROM [sys].dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO
Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)
D: Zurückgeben der Objekt-ID für ein angegebenes Objekt
Das folgende Beispiel gibt die Objekt-ID für die FactFinance
-Tabelle in der AdventureWorksPDW2022-Datenbank zurück.
SELECT OBJECT_ID('AdventureWorksPDW2012.dbo.FactFinance') AS 'Object ID';