OBJECT_NAME (Transact-SQL)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
スキーマ スコープ オブジェクトのデータベース オブジェクト名を返します。 スキーマ スコープ オブジェクトの一覧については、「sys.objects (Transact-SQL)」を参照してください。
構文
OBJECT_NAME ( object_id [, database_id ] )
引数
object_id
使用するオブジェクトの ID です。 object_id のデータ型は int です。指定したデータベース コンテキスト、または現在のデータベース コンテキストのスキーマ スコープ オブジェクトと見なされます。
database_id
オブジェクトを検索するデータベースの ID です。database_id は int です。
戻り値の型
sysname
例外
エラーが発生した場合、または呼び出し元にオブジェクトの表示権限がない場合は、NULL が返されます。 呼び出し先データベースの AUTO_CLOSE オプションが ON に設定されている場合、データベースが開きます。
ユーザーが所有しているか、または権限を与えられている、セキュリティ保護可能なリソースのメタデータのみを表示できます。 つまり、オブジェクトに対する権限がユーザーに与えられていない場合、メタデータを生成する組み込み関数 (OBJECT_NAME など) が NULL を返す可能性があります。 詳細については、「 Metadata Visibility Configuration」を参照してください。
アクセス許可
オブジェクトに対する ANY 権限が必要です。 データベース ID を指定するには、そのデータベースの CONNECT 権限を持っているか、ゲスト アカウントが有効である必要があります。
解説
システム関数は、選択リストの中、WHERE 句の中、また、式を使える所ならどこにでも使用できます。 詳しくは、「式」および「WHERE」をご覧ください。
このシステム関数が返す値には、現在のデータベースの照合順序が使用されます。
既定では、SQL Server データベース エンジンの場合、object_id が現在のデータベース内にあると想定されます。 別のデータベースの object_id を参照するクエリは、NULL または正しくない値を返します。 たとえば、次のクエリでは、現在のデータベースのコンテキストは AdventureWorks2022 です。 データベース エンジンは、クエリの FROM 句に指定されたデータベースではなく、このデータベースの指定されたオブジェクト ID のオブジェクト名を返します。 したがって、正しくない情報が返されます。
USE AdventureWorks2022;
GO
SELECT DISTINCT OBJECT_NAME(object_id)
FROM master.sys.objects;
GO
データベース ID を指定することで、別のデータベースのコンテキストにあるオブジェクト名を解決できます。 次の例では、master
関数で OBJECT_SCHEMA_NAME
データベースのデータベース ID を指定し、正確な結果を返します。
USE AdventureWorks2022;
GO
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, 1) AS schema_name
FROM master.sys.objects;
GO
例
A. WHERE 句で OBJECT_NAME を使用する
この例では、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. 3 つの要素で構成されたオブジェクト名を取得する
この例では、データベース名、スキーマ名、およびオブジェクト名と共に、すべてのデータベースのすべてのオブジェクトの統計を示す 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、Analytics Platform System (PDW)
D. WHERE 句で OBJECT_NAME を使用する
この例では、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)