Share via


OBJECT_SCHEMA_NAME (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse Analytics

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

Hinweis

Die Funktion OBJECT_SCHEMA_NAME wird nur in dedizierten SQL-Pools in Azure Synapse Analytics unterstützt.

Transact-SQL-Syntaxkonventionen

Syntax

OBJECT_SCHEMA_NAME ( object_id [, database_id ] )  

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

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. Die database_id ist 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. Metadaten ausgebende integrierte Funktionen wie OBJECT_SCHEMA_NAME geben möglicherweise NULL zurück, 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 das von dieser Systemfunktion zurückgegebene Resultset wird die Sortierung der aktuellen Datenbank verwendet.

Wenn database_id nicht angegeben ist, wird in SQL Server-Datenbank-Engine 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 der Kontext der aktuellen Datenbank AdventureWorks2022. Die Datenbank-Engine versucht, einen Objektschemanamen für die angegebene object_id in dieser Datenbank zurückzugeben, statt in der in der FROM-Klausel der Abfrage angegebenen Datenbank. Deshalb werden fehlerhafte Informationen zurückgegeben.

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

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.

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

Beispiele

A. Zurückgeben des Objektschemanamens und des Objektnamens

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

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 Objektnamen, die aus drei Teilen bestehen

Im folgenden Beispiel werden die Datenbank, das Schema und der Objektname für alle Objekte im aktuellen Datenbankkontext zurückgegeben.

SELECT QUOTENAME(DB_NAME(db_id()))   
    + N'.'   
    + QUOTENAME(OBJECT_SCHEMA_NAME(object_id, db_id()))   
    + N'.'   
    + QUOTENAME(OBJECT_NAME(object_id, db_id()))  
    , *   
FROM sys.objects;
GO  

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.

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

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  

Nächste Schritte