sys.dm_sql_referencing_entities (Transact-SQL)
現在のデータベース内で、他のユーザー定義エンティティを名前で参照する各エンティティについて、対応する 1 行を返します。2 つのエンティティ間の依存関係は、一方のエンティティ (参照先エンティティ) の名前が、もう一方のエンティティ (参照元エンティティ) の保存されている SQL 式の中で参照された場合に形成されます。たとえば、参照先エンティティとしてユーザー定義型 (UDT) を指定した場合、定義の中でその型を名前で参照する各ユーザー定義エンティティが返されます。この関数は、指定したエンティティを参照していたとしても、他のデータベース内のエンティティは返しません。この関数は、サーバー レベルの DDL トリガを参照元エンティティとして返す master データベースのコンテキストで実行する必要があります。
この動的管理関数に参照先エンティティを指定すると、現在のデータベース内で、そのエンティティを参照する次の種類のエンティティをレポートできます。
スキーマ バインドまたは非スキーマ バインド エンティティ
データベース レベル DDL トリガ
サーバー レベル DDL トリガ
構文
sys.dm_sql_referencing_entities (
' schema_name.referenced_entity_name ' , ' <referenced_class> ' )
<referenced_class> ::=
{
OBJECT
| TYPE
| XML_SCHEMA_COLLECTION
| PARTITION_FUNCTION
}
引数
schema_name.referenced_entity_name
参照先エンティティの名前を指定します。参照先クラスが PARTITION_FUNCTION である場合を除き、schema_name は必須です。
schema_name.referenced_entity_name のデータ型は nvarchar(517) です。
<referenced_class> ::= { OBJECT | TYPE | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION }
参照先エンティティのクラスを指定します。クラスは 1 つのステートメントに 1 つだけ指定できます。<referenced_class> のデータ型は nvarchar(60) です。
返されるテーブル
列名 |
データ型 |
説明 |
---|---|---|
referencing_schema_name |
sysname |
参照元エンティティが属しているスキーマ。NULL 値は許可されます。 データベース レベルおよびサーバー レベルの DDL トリガの場合は NULL です。 |
referencing_entity_name |
sysname |
参照元エンティティの名前。NULL 値は許可されません。 |
referencing_id |
int |
参照元エンティティの ID。NULL 値は許可されません。 |
referencing_class |
tinyint |
参照元エンティティのクラス。NULL 値は許可されません。 1 = オブジェクト 12 = データベース レベル DDL トリガ 13 = サーバー レベル DDL トリガ |
referencing_class_desc |
nvarchar(60) |
参照元エンティティのクラスの説明。 オブジェクト DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER |
is_caller_dependent |
bit |
参照先エンティティが呼び出し元のスキーマに依存するため、参照先エンティティ ID の解決は実行時に行われることを示します。 この値が 1 の場合、参照元エンティティがエンティティを参照している可能性はあるものの、参照先エンティティ ID の解決は呼び出し元に依存するため特定できないことを示します。これが該当するのは、EXECUTE ステートメント内で呼び出されるストアド プロシージャ、拡張ストアド プロシージャ、または、ユーザー定義関数に対する非スキーマ バインド参照だけです。 この値が 0 の場合、参照先エンティティは呼び出し元に依存しません。 |
例外
次のいずれかの条件に該当した場合は、空の結果セットが返されます。
システム オブジェクトが指定されている。
指定されたエンティティが現在のデータベースに存在しない。
指定されたエンティティがいずれのエンティティも参照しない。
無効なパラメータが渡される。
指定された参照先エンティティが番号付きストアド プロシージャの場合は、エラーが返されます。
説明
次の表に、依存関係情報が作成および管理されるエンティティの種類を示します。ルール、既定値、一時テーブル、一時ストアド プロシージャ、またはシステム オブジェクトについては、依存関係情報は作成も管理もされません。
エンティティの種類 |
参照元エンティティ |
参照先エンティティ |
---|---|---|
テーブル |
可* |
可 |
ビュー |
可 |
可 |
Transact-SQL ストアド プロシージャ** |
可 |
可 |
CLR ストアド プロシージャ |
不可 |
可 |
Transact-SQL ユーザー定義関数 |
可 |
可 |
CLR ユーザー定義関数 |
不可 |
可 |
CLR トリガ (DML および DDL) |
不可 |
不可 |
Transact-SQL DML トリガ |
可 |
不可 |
Transact-SQL データベース レベルの DDL トリガ |
可 |
不可 |
Transact-SQL サーバー レベルの DDL トリガ |
可 |
不可 |
拡張ストアド プロシージャ |
不可 |
可 |
キュー |
不可 |
可 |
シノニム |
不可 |
可 |
型 (別名および CLR ユーザー定義型) |
不可 |
可 |
XML スキーマ コレクション |
不可 |
可 |
パーティション関数 |
不可 |
可 |
* テーブルは、Transact-SQL モジュール、ユーザー定義型、XML スキーマ コレクション (計算列の定義内)、CHECK 制約、DEFAULT 制約のいずれかを参照する場合にのみ、参照元エンティティとして追跡されます。
** 1 より大きな整数値を持つ番号付きストアド プロシージャは、参照元エンティティとしても、参照先エンティティとしても追跡されません。
詳細については、「SQL の依存関係について」を参照してください。
権限
参照先エンティティに対する CONTROL 権限および sys.dm_sql_referencing_entities に対する SELECT 権限が必要です。参照先エンティティがパーティション関数である場合、データベースに対する CONTROL 権限が必要です。既定では、SELECT 権限が public に与えられます。
例
A. 特定のエンティティを参照するエンティティを取得する
次の例では、現在のデータベース内で、指定したテーブルを参照するエンティティを取得します。
USE AdventureWorks;
GO
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('Production.Product', 'OBJECT');
GO
B. 指定された型を参照するエンティティを取得する
次の例では、別名型 dbo.Flag を参照するエンティティを取得します。結果セットには、この型を使用する 2 つのストアド プロシージャが示されます。dbo.Flag 型は HumanResources.Employee テーブル内の複数の列の定義でも使用されていますが、テーブル内の計算列、CHECK 制約、または DEFAULT 制約の定義にはこの型がないため、HumanResources.Employee テーブルについては行が返されません。
USE AdventureWorks;
GO
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.Flag', 'TYPE');
GO
以下に結果セットを示します。
referencing_schema_name referencing_entity_name referencing_id referencing_class_desc is_caller_dependent
----------------------- ------------------------- ------------- ---------------------- -------------------
HumanResources uspUpdateEmployeeHireInfo 1803153469 OBJECT_OR_COLUMN 0
HumanResources uspUpdateEmployeeLogin 1819153526 OBJECT_OR_COLUMN 0
(2 row(s) affected)
変更履歴
変更内容 |
---|
「解説」にあった「CLR テーブル値関数については、列の依存関係は追跡されません」という記述を削除しました。 |
referenced_entity_name パラメータのデータ型を修正しました。 |