OBJECT_NAME (Transact-SQL)
Изменения: 12 декабря 2006 г.
Возвращает имя объекта базы данных в области действия схемы. Список объектов, существующих в области действия схемы, см. в разделе sys.objects (Transact-SQL).
Синтаксические обозначения в Transact-SQL
Синтаксис
OBJECT_NAME ( object_id [, database_id ] )
Аргументы
- object_id
Идентификатор используемого объекта. Аргумент object_id имеет тип int. Предполагается, что это объект в области схемы указанной базы данных или в контексте текущей базы данных.
- database_id
Идентификатор базы данных, где будет выполняться поиск объекта. Аргумент database_id имеет тип int.
Типы возвращаемых данных
sysname
Исключения
Возвращает значение NULL в случае ошибки или если участник не имеет разрешения на просмотр объекта. Если параметр AUTO_CLOSE целевой базы данных имеет значение ON, то функция откроет базу данных.
Пользователь может просматривать только метаданные защищаемых объектов, которыми он владеет или на которые пользователю были предоставлены разрешения. Это означает, что встроенные функции, создающие метаданные, такие как OBJECT_NAME, могут вернуть значение NULL в случае, если пользователь не имеет разрешений на объект. Дополнительные сведения см. в разделах Настройка видимости метаданных и Устранение неполадок, связанных с видимостью метаданных.
Замечания
Системные функции можно использовать в списке выбора, в предложении WHERE и в любом месте, где разрешается выражение. Дополнительные сведения см. разделах Выражения и WHERE.
Значение, возвращаемое системной функцией, использует параметры сортировки текущей базы данных.
Компонент SQL Server Database Engine предполагает, что идентификатор object_id находится в контексте текущей базы данных. Запрос, ссылающийся на аргумент object_id в другой базе данных, возвращает значение NULL или неправильные результаты. Например, в следующем запросе текущий контекст базы данных — база данных AdventureWorks
. Компонент Database Engine пытается возвратить имя объекта для заданного идентификатора объекта в этой базе данных, а не в базе данных, указанной в предложении FROM запроса. Поэтому возвращаются неверные сведения.
USE AdventureWorks;
GO
SELECT DISTINCT OBJECT_NAME(object_id)
FROM master.sys.objects;
GO
В версии с пакетом обновления 2 (SP2) можно разрешить имена объектов в контексте другой базы данных, указав идентификатор базы данных. Следующий пример указывает идентификатор базы данных для базы данных master
в функции OBJECT_SCHEMA_NAME
и возвращает верные результаты.
USE AdventureWorks;
GO
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, 1) AS schema_name
FROM master.sys.objects;
GO
Разрешения
Необходимо разрешение ANY на данный объект. Чтобы указать идентификатор базы данных, также требуется разрешение CONNECT на базу данных или необходимо включить гостевую учетную запись.
Примеры
А. Использование параметра OBJECT_NAME в предложении WHERE
Следующий пример возвращает столбцы из представления каталога sys.objects
для объекта, указанного параметром OBJECT_NAME
в предложении WHERE
инструкции SELECT
.
USE AdventureWorks;
GO
DECLARE @MyID int;
SET @MyID = (SELECT OBJECT_ID('AdventureWorks.Production.Product',
'U'));
SELECT name, object_id, type_desc
FROM sys.objects
WHERE name = OBJECT_NAME(@MyID);
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_text
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)
OBJECT_ID (Transact-SQL)
Другие ресурсы
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
12 декабря 2006 г. |
|
17 июля 2006 г. |
|