OBJECT_SCHEMA_NAME (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

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

注意

OBJECT_SCHEMA_NAME 関数は、Azure Synapse Analytics の専用 SQL プールでのみサポートされます。

Transact-SQL 構文表記規則

構文

OBJECT_SCHEMA_NAME ( object_id [, database_id ] )  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

object_id

使用するオブジェクトの ID。 object_id のデータ型は int です。指定したデータベース コンテキスト、または現在のデータベース コンテキストのスキーマ スコープ オブジェクトと見なされます。

database_id

オブジェクトを検索するデータベースの ID。database_idint です。

戻り値の型

sysname

例外

エラーが発生した場合、または呼び出し元にオブジェクトの表示権限がない場合は、NULL が返されます。 ターゲット データベースで AUTO_CLOSE オプションが ON に設定されている場合、関数によってデータベースが開かれます。

ユーザーが所有しているか、または権限を与えられている、セキュリティ保護可能なリソースのメタデータのみを表示できます。 ユーザーがオブジェクトに対するアクセス許可を持っていない場合、メタデータを生成する OBJECT_SCHEMA_NAME などの組み込み関数は NULL を返す可能性があります。 詳細については、「 Metadata Visibility Configuration」を参照してください。

アクセス許可

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

解説

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

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

database_id が指定されていない場合、SQL Server データベース エンジン は object_id が現在のデータベースのコンテキストであると見なします。 別のデータベースの object_id を参照するクエリは、NULL または正しくない結果を返します。 たとえば、次のクエリでは、現在のデータベースのコンテキストは AdventureWorks2022 です。 データベース エンジンは、クエリの FROM 句で指定されているデータベースではなく現在のデータベースで、指定された object_id に対するオブジェクト スキーマ名を返そうとします。 したがって、正しくない情報が返されます。

SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id)  
FROM master.sys.objects;  

次の例では、master 関数で OBJECT_SCHEMA_NAME データベースのデータベース ID を指定し、正確な結果を返します。

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

A. オブジェクト スキーマ名とオブジェクト名を取得する

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

この例では、アドホック ステートメントでも準備されたステートメントでもない、キャッシュされたすべてのクエリ プランについて、オブジェクト スキーマ名、オブジェクト名、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_statement  
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  

B. 3 つの要素で構成されたオブジェクト名を取得する

次の例では、現在のデータベース コンテキストですべてのオブジェクトのデータベース、スキーマ、オブジェクト名が返されます。

SELECT QUOTENAME(DB_NAME(db_id()))   
    + N'.'   
    + QUOTENAME(OBJECT_SCHEMA_NAME(object_id, db_id()))   
    + N'.'   
    + QUOTENAME(OBJECT_NAME(object_id, db_id()))  
    , *   
FROM sys.objects;
GO  

この例では、データベース名、スキーマ名、およびオブジェクト名と共に、すべてのデータベースのすべてのオブジェクトの統計を示す sys.dm_db_index_operational_stats 動的管理ビューの残りのすべての列を返します。

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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  

次の手順