OBJECT_SCHEMA_NAME (Transact-SQL)

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

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

OBJECT_SCHEMA_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_SCHEMA_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 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 das von dieser Systemfunktion zurückgegebene Resultset wird die Sortierung der aktuellen Datenbank verwendet.

Wenn database_id nicht angegeben ist, wird in SQL Server Database Engine (Datenbankmodul) 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 Objektschemanamen für die angegebene Objekt-ID in dieser Datenbank zurückzugeben, statt in der in der FROM-Klausel der Abfrage angegebenen Datenbank. Deshalb werden fehlerhafte Informationen zurückgegeben.

USE AdventureWorks;
GO
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id)
FROM master.sys.objects;
GO

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. 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_statement
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

B. 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