OBJECT_NAME (Transact-SQL)

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

Разрешения

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

Замечания

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

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

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

USE AdventureWorks2008R2;
GO
SELECT DISTINCT OBJECT_NAME(object_id)
FROM master.sys.objects;
GO

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

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

Примеры

А. Использование параметра OBJECT_NAME в предложении WHERE

Следующий пример возвращает столбцы из представления каталога sys.objects для объекта, указанного параметром OBJECT_NAME в предложении WHERE инструкции SELECT.

USE AdventureWorks2008R2;
GO
DECLARE @MyID int;
SET @MyID = (SELECT OBJECT_ID('AdventureWorks2008R2.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