OBJECT_NAME (Transact-SQL)

更新 : 2006 年 12 月 12 日

スキーマ スコープ オブジェクトのデータベース オブジェクト名を返します。スキーマ スコープ オブジェクトの一覧については、「sys.objects (Transact-SQL)」を参照してください。

トピック リンク アイコン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 を返す可能性があります。詳細については、「メタデータ表示の構成」および「メタデータ表示のトラブルシューティング」を参照してください。

解説

システム関数は、選択リストの中、WHERE 句の中、また、式を使える所ならどこにでも使用できます。詳細については、「」および「WHERE」を参照してください。

このシステム関数が返す値には、現在のデータベースの照合順序が使用されます。

object_id が現在のデータベース コンテキストにあると見なされます。別のデータベースにある object_id を参照するクエリでは、NULL または不適切な結果が返されます。たとえば、次のクエリでは、現在のデータベースのコンテキストは AdventureWorks です。データベース エンジンは、クエリの FROM 句に指定されたデータベースではなく、このデータベースの指定されたオブジェクト ID のオブジェクト名を返します。したがって、正しくない情報が返されます。

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

Service Pack 2 では、データベース ID を指定することで、別のデータベースのコンテキストにあるオブジェクト名を解決できます。次の例では、OBJECT_SCHEMA_NAME 関数で master データベースのデータベース ID を指定して、正しい結果を取得します。

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

権限

オブジェクトに対する ANY 権限が必要です。データベース ID を指定するには、そのデータベースの CONNECT 権限を持っているか、ゲスト アカウントが有効である必要があります。

A. WHERE 句で OBJECT_NAME を使用する

この例では、SELECT ステートメントの WHERE 句の OBJECT_NAME で指定されたオブジェクトの sys.objects カタログ ビューから列を返します。

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

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

参照

関連項目

メタデータ関数 (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)
OBJECT_ID (Transact-SQL)

その他の技術情報

セキュリティ保護可能なリソース

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

新しい内容 :
  • SP2 の新機能として、「構文」および「引数」に database_id パラメータを追加しました。
  • 「権限」を追加しました。

2006 年 7 月 17 日

新しい内容 :
  • 「例外」を追加しました。