OBJECT_NAME (Transact-SQL)
Gibt den Namen des Datenbankobjekts für Objekte mit Schemabereich zurück. Eine Liste der Objekte mit Schemabereich finden Sie unter sys.objects (Transact-SQL).
Syntax
OBJECT_NAME ( object_id [, database_id ] )
Argumente
object_id
Die ID des zu verwendenden Objekts. object_id entspricht int, und es wird davon ausgegangen, dass es sich dabei um ein Objekt mit Schemabereich in der angegebenen Datenbank oder im aktuellen Datenbankkontext handelt.database_id
Die ID der Datenbank, in der das Objekt zu suchen ist. database_id entspricht 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 Konfigurieren der Sichtbarkeit von Metadaten und unter Behandlung von Problemen bei der Sichtbarkeit von Metadaten.
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 Database Engine (Datenbankmodul) 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 NULL oder falsche Ergebnisse zurück. Beispielsweise ist in der folgenden Abfrage AdventureWorks der Kontext der aktuellen Datenbank. Database Engine (Datenbankmodul) 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 AdventureWorks;
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 AdventureWorks;
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 AdventureWorks;
GO
DECLARE @MyID int;
SET @MyID = (SELECT OBJECT_ID('AdventureWorks.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 dreiteiligen Objektnamen
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