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