Поделиться через


OBJECT_SCHEMA_NAME (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в 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 в случае, если пользователь не имеет разрешений на объект. Дополнительные сведения см. в разделах Настройка видимости метаданных и Устранение неполадок, связанных с видимостью метаданных.

Разрешения

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

Замечания

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

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

Если аргумент database_id не указан, то идентификатор SQL Server Database Engine предполагает, что аргумент object_id находится в контексте текущей базы данных. Запрос, ссылающийся на аргумент object_id в другой базе данных, возвращает значение NULL или неправильные результаты. Например, в следующем запросе текущий контекст базы данных — база данных AdventureWorks. Компонент Database Engine пытается возвратить имя схемы объекта для заданного идентификатора объекта в этой базе данных, а не в базе данных, указанной в предложении FROM запроса. Поэтому возвращаются неверные сведения.

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

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

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

Примеры

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

Следующий пример возвращает имя схемы объекта, имя объекта, и 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

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

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

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