OBJECT_SCHEMA_NAME (Transact-SQL)
Возвращает имя схемы базы данных в области действия схемы. Список объектов области схемы см. в разделе sys.objects (Transact-SQL).
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Синтаксические обозначения в 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 или неправильные результаты. Например, в следующем запросе текущий контекст базы данных — база данных AdventureWorks2012. Компонент Компонент Database Engine пытается возвратить имя схемы объекта для заданного идентификатора объекта в этой базе данных, а не в базе данных, указанной в предложении 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-текст для всех кэшированных планов запроса, которые не являются нерегламентированными или подготовленными инструкциями.
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
См. также
Справочник
Функции метаданных (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)