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


OBJECT_NAME (Transact-SQL)

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

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

Разрешения

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

Замечания

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

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

По умолчанию ядро СУБД Microsoft SQL Server предполагает, что аргумент object_id находится в контексте текущей базы данных. Запрос, ссылающийся на object_id в другой базе данных, возвращает значение NULL или неправильные результаты. Например, в следующем запросе контекст текущей базы данных — AdventureWorks2022. Ядро СУБД Microsoft SQL Server пытается возвратить для заданного идентификатора объекта имя объекта именно в этой базе данных, а не в той, которая указана в предложении запроса FROM. Поэтому возвращаются неверные сведения.

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

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

USE AdventureWorks2022;  
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 AdventureWorks2022;  
GO  
DECLARE @MyID INT;  
SET @MyID = (SELECT OBJECT_ID('AdventureWorks2022.Production.Product',  
    'U'));  
SELECT name, object_id, type_desc  
FROM sys.objects  
WHERE name = OBJECT_NAME(@MyID);  
GO  

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

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

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

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

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

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

Следующий пример возвращает столбцы из представления каталога sys.objects для объекта, указанного параметром OBJECT_NAME в предложении WHERE инструкции SELECT. (В вашем случае номер объекта (274100017 в примере ниже) будет иным. Чтобы выполнить пример, найдите допустимый номер объекта, выполнив SELECT name, object_id FROM sys.objects; в базе данных.)

SELECT name, object_id, type_desc  
FROM sys.objects  
WHERE name = OBJECT_NAME(274100017);  

См. также

Функции метаданных (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)
OBJECT_ID (Transact-SQL)