OBJECT_SCHEMA_NAME (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics

Возвращает имя схемы базы данных в области действия схемы. Список объектов в схеме приводится в статье документации sys.objects (Transact-SQL).

Примечание.

Эта функция OBJECT_SCHEMA_NAME поддерживается только в выделенных пулах SQL в Azure Synapse Analytics.

Соглашения о синтаксисе Transact-SQL

Синтаксис

OBJECT_SCHEMA_NAME ( object_id [, database_id ] )  

Аргументы

object_id

Идентификатор используемого объекта. Аргумент object_id имеет тип int. Предполагается, что это объект в области схемы указанной базы данных или в контексте текущей базы данных.

database_id

Идентификатор базы данных, в которой должен находиться объект. database_id имеет значение int.

Типы возвращаемых данных

sysname

Исключения

Возвращает значение NULL в случае ошибки или если участник не имеет разрешений для просмотра объекта. Если целевая база данных имеет параметр AUTO_CLOSE для параметра ON, функция открывает базу данных.

Пользователь может просматривать только метаданные защищаемых объектов, которыми он владеет или на которые пользователю были предоставлены разрешения. Встроенные функции метаданных, такие как OBJECT_SCHEMA_NAME может возвращать значение NULL, если у пользователя нет разрешений на объект. Дополнительные сведения см. в разделе Metadata Visibility Configuration.

Разрешения

Необходимо разрешение ANY на данный объект. Чтобы указать идентификатор базы данных, также требуется разрешение CONNECT на базу данных или необходимо включить гостевую учетную запись.

Замечания

Системные функции можно использовать в списке выбора, в предложении WHERE и в любом месте, где разрешается использование выражений. Дополнительные сведения см. в разделах Выражения и WHERE.

Результирующий набор, возвращенный системной функцией, использует порядок сортировки текущей базы данных.

Если database_id не задано, ядро СУБД SQL Server предполагает, что object_id в контексте текущей базы данных. Запрос, ссылающийся на другую object_id базу данных, возвращает значение NULL или неверные результаты. Например, в следующем запросе контекст текущей базы данных — AdventureWorks2022. Ядро СУБД пытается вернуть имя схемы объекта для указанной object_id в текущей базе данных вместо базы данных, указанной в предложении FROM запроса. Поэтому возвращаются неверные сведения.

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

Следующий пример указывает идентификатор базы данных для базы данных master в базе данных в функции OBJECT_SCHEMA_NAME и приводит к правильным результатам.

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

Примеры

А. Возвращает имя схемы объекта и имя объекта

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Следующий пример возвращает имя схемы объекта, имя объекта и SQL-текст для всех кэшированных планов запроса, которые не являются нерегламентированными или подготовленными инструкциями.

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. Возврат трехкомпонентных имен объектов

В следующем примере возвращается имя базы данных, схемы и объекта для всех объектов в текущем контексте базы данных.

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  

Следующий пример возвращает имя базы данных, схемы и объекта вместе со всеми остальными столбцами в динамическом административном представлении sys.dm_db_index_operational_stats для всех объектов во всех базах данных.

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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  

Следующие шаги