OBJECT_NAME (Transact-SQL)

Anwendungsbereich: JaSQL Server (alle unterstützten Versionen) JaAzure SQL-Datenbank JaVerwaltete Azure SQL-Instanz JaAzure Synapse Analytics JaParallel Data Warehouse

Gibt den Namen des Datenbankobjekts für Objekte mit Schemabereich zurück. Eine Liste der schemabezogenen Objekte finden Sie unter sys.objects (Transact-SQL).

Symbol für Themenlink Transact-SQL-Syntaxkonventionen

Syntax

OBJECT_NAME ( object_id [, database_id ] )  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

object_id
Die ID des zu verwendenden Objekts. object_id ist vom Datentyp int, und es wird davon ausgegangen, dass es sich um ein schemabezogenes Objekt in der angegebenen Datenbank oder im aktuellen Datenbankkontext handelt.

database_id
Die ID der Datenbank, in der das Objekt gesucht werden soll. database_id ist vom Datentyp int.

Rückgabetypen

sysname

Ausnahmen

Gibt NULL bei einem Fehler zurück oder wenn ein Aufrufer nicht über Berechtigungen zum Anzeigen des Objekts verfügt. Wenn für die Zieldatenbank AUTO_CLOSE auf ON festgelegt wurde, wird die Datenbank mithilfe der Funktion geöffnet.

Ein Benutzer kann nur die Metadaten sicherungsfähiger Elemente anzeigen, bei denen der Benutzer entweder der Besitzer ist oder für die dem Benutzer eine Berechtigung erteilt wurde. Dies bedeutet, dass Metadaten ausgebende integrierte Funktionen, z. B. OBJECT_NAME, möglicherweise NULL zurückgeben, wenn dem Benutzer für das Objekt keine Berechtigung erteilt wurde. Weitere Informationen finden Sie unter Metadata Visibility Configuration.

Berechtigungen

Erfordert die ANY-Berechtigung für das Objekt. Zum Angeben einer Datenbank-ID ist eine CONNECT-Berechtigung erforderlich, oder das Gastkonto muss aktiviert werden.

Hinweise

Systemfunktionen können in der SELECT-Liste, in einer WHERE-Klausel und überall dort verwendet werden, wo ein Ausdruck zulässig ist. Weitere Informationen finden Sie unter Ausdrücke und WHERE.

Für den von dieser Systemfunktion zurückgegebenen Wert wird die Sortierung der aktuellen Datenbank verwendet.

In SQL Server-Datenbank-Engine wird standardmäßig davon ausgegangen, dass sich object_id im Kontext der aktuellen Datenbank befindet. Eine Abfrage, die auf einen Wert für object_id in einer anderen Datenbank verweist, gibt entweder NULL oder falsche Ergebnisse zurück. Beispielsweise ist in der folgenden Abfrage AdventureWorks2012 der Kontext der aktuellen Datenbank. Datenbank-Engine versucht, einen Objektnamen für die angegebene Objekt-ID in dieser Datenbank statt in der in der FROM-Klausel der Abfrage angegebenen Datenbank zurückzugeben. Deshalb werden fehlerhafte Informationen zurückgegeben.

USE AdventureWorks2012;  
GO  
SELECT DISTINCT OBJECT_NAME(object_id)  
FROM master.sys.objects;  
GO  

Sie können Objektnamen im Kontext einer anderen Datenbank auflösen, indem Sie eine Datenbank-ID angeben. Im folgenden Beispiel wird die Datenbank-ID für die master-Datenbank in der OBJECT_SCHEMA_NAME-Funktion angegeben, und die richtigen Ergebnisse werden zurückgegeben.

USE AdventureWorks2012;  
GO  
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, 1) AS schema_name  
FROM master.sys.objects;  
GO  

Beispiele

A. Verwenden von OBJECT_NAME in einer WHERE-Klausel

Das folgende Beispiel gibt Spalten aus der sys.objects-Katalogsicht für das durch OBJECT_NAME in der WHERE-Klausel der SELECT-Anweisung angegebene Objekt zurück.

USE AdventureWorks2012;  
GO  
DECLARE @MyID INT;  
SET @MyID = (SELECT OBJECT_ID('AdventureWorks2012.Production.Product',  
    'U'));  
SELECT name, object_id, type_desc  
FROM sys.objects  
WHERE name = OBJECT_NAME(@MyID);  
GO  

B. Zurückgeben des Objektschemanamens und des Objektnamens

Im folgenden Beispiel werden der Schemaname des Objekts, der Objektname und SQL-Text für alle zwischengespeicherten Abfragepläne zurückgegeben, bei denen es sich nicht um Ad-hoc- oder vorbereitete Anweisungen handelt.

SELECT DB_NAME(st.dbid) AS database_name,   
    OBJECT_SCHEMA_NAME(st.objectid, st.dbid) AS schema_name,  
    OBJECT_NAME(st.objectid, st.dbid) AS object_name,   
    st.text AS query_text  
FROM sys.dm_exec_query_stats AS qs  
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st  
WHERE st.objectid IS NOT NULL;  
GO  

C. Zurückgeben von Objektnamen, die aus drei Teilen bestehen

Im folgenden Beispiel werden für alle Objekte in allen Datenbanken die Datenbank, das Schema und der Objektname sowie alle anderen Spalten in der dynamischen Verwaltungssicht sys.dm_db_index_operational_stats zurückgegeben.

SELECT QUOTENAME(DB_NAME(database_id))   
    + N'.'   
    + QUOTENAME(OBJECT_SCHEMA_NAME(object_id, database_id))   
    + N'.'   
    + QUOTENAME(OBJECT_NAME(object_id, database_id))  
    , *   
FROM sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL);  
GO  

Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

D: Verwenden von OBJECT_NAME in einer WHERE-Klausel

Das folgende Beispiel gibt Spalten aus der sys.objects-Katalogsicht für das durch OBJECT_NAME in der WHERE-Klausel der SELECT-Anweisung angegebene Objekt zurück. (Ihre Objektnummer wird sich von der im untenstehenden Beispiel unterscheiden (hier: 274100017).) Wenn Sie dieses Beispiel testen möchten, suchen Sie nach einer gültigen Objektnummer, indem Sie SELECT name, object_id FROM sys.objects; in Ihrer Datenbank ausführen.)

SELECT name, object_id, type_desc  
FROM sys.objects  
WHERE name = OBJECT_NAME(274100017);  

Siehe auch

Metadata Functions (Transact-SQL) (Metadatenfunktionen (Transact-SQL))
OBJECT_DEFINITION (Transact-SQL)
OBJECT_ID (Transact-SQL)