適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
名前によって別のユーザー定義エンティティを参照する、現在のデータベース内のエンティティごとに 1 つの行を返します。 2 つのエンティティ間の依存関係は、一方のエンティティ (参照先エンティティ) の名前が、もう一方のエンティティ (参照元エンティティ) の保存されている SQL 式の中で参照された場合に形成されます。 たとえば、ユーザー定義型 (UDT) が参照先エンティティとして指定されている場合、この関数は、その定義内の名前でその型を参照する各ユーザー定義エンティティを返します。 この関数は、指定したエンティティを参照できる他のデータベース内のエンティティを返しません。 この関数は、サーバー レベルの DDL トリガーを参照元エンティティとして返すために、マスター データベースのコンテキストで実行する必要があります。
この動的管理関数に参照先エンティティを指定すると、現在のデータベース内で、そのエンティティを参照する次の種類のエンティティをレポートできます。
スキーマ バインドまたは非スキーマ バインド エンティティ
データベース レベルの DDL トリガー
サーバー レベルの DDL トリガー
適用対象: SQL Server (SQL Server 2008 (10.0.x) 以降)、SQL Database。
構文
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 参照先エンティティの名前を指定します。
schema_name は、参照先のクラスがPARTITION_FUNCTIONされている場合を除き、必須です。
schema_name.referenced_entity_name は nvarchar(517)です。
<referenced_class> ::= { OBJECT | TYPE | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION } 参照先エンティティのクラスです。 ステートメントごとに指定できるクラスは 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) | 参照元エンティティのクラスの説明。 OBJECT DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER |
| is_caller_dependent | bit | 参照先エンティティが呼び出し元のスキーマに依存するため、参照先エンティティ ID の解決は実行時に行われることを示します。 1 = 参照元エンティティは、エンティティを参照する可能性があります。ただし、参照先エンティティ ID の解決は呼び出し元に依存し、決定できません。 これは、EXECUTE ステートメントで呼び出されたストアド プロシージャ、拡張ストアド プロシージャ、またはユーザー定義関数へのスキーマ バインド以外の参照に対してのみ発生します。 この値が 0 の場合、参照先エンティティは呼び出し元に依存しません。 |
例外
次のいずれかの条件に該当した場合は、空の結果セットが返されます。
システム オブジェクトが指定されています。
指定したエンティティが現在のデータベースに存在しません。
指定されたエンティティは、どのエンティティも参照しません。
無効なパラメーターが渡される。
指定した参照先エンティティが番号付きストアド プロシージャである場合にエラーを返します。
解説
次の表に、依存関係情報を作成および管理するエンティティの種類を示します。 ルール、既定値、一時テーブル、一時ストアド プロシージャ、またはシステム オブジェクトに対しては、依存関係情報は作成または管理されません。
| エンティティ型 | 参照元エンティティ | 参照先エンティティ |
|---|---|---|
| テーブル | はい* | はい |
| 表示 | はい | はい |
| Transact-SQL ストアド プロシージャ** | はい | はい |
| CLR ストアド プロシージャ (CLR stored procedure) | いいえ | はい |
| Transact-SQL ユーザー定義関数 | はい | はい |
| CLR ユーザー定義関数 | いいえ | はい |
| CLR トリガー (DML および DDL) | いいえ | いいえ |
| Transact-SQL DML トリガー | はい | いいえ |
| Transact-SQL データベース レベル DDL トリガー | はい | いいえ |
| Transact-SQL サーバー レベル DDL トリガー | はい | いいえ |
| 拡張ストアド プロシージャ | いいえ | はい |
| キュー | いいえ | はい |
| シノニム | いいえ | はい |
| 型 (別名および CLR ユーザー定義型) | いいえ | はい |
| XML スキーマ コレクション | いいえ | はい |
| パーティション関数 | いいえ | はい |
* テーブルが参照エンティティとして追跡されるのは、計算された列、CHECK制約、または DEFAULT 制約の定義において、Transact-SQL モジュール、ユーザー定義型、またはXMLスキーマコレクションを参照している場合のみです。
** 1 より大きな整数値を持つ番号付きストアド プロシージャは、参照元エンティティとしても、参照先エンティティとしても追跡されません。
アクセス許可
SQL Server 2008 (10.0.x) - SQL Server 2012 (11.x)
参照先オブジェクトに対する CONTROL 権限が必要です。 参照先エンティティがパーティション関数である場合、データベースに対する CONTROL 権限が必要です。
sys.dm_sql_referencing_entitiesに対する SELECT 権限が必要です。 既定では、SELECT 権限が public に与えられます。
SQL Server 2014 (12.x) 以降
参照先オブジェクトに対するアクセス許可は必要ありません。 参照対象の一部に対してのみ定義がある場合 VIEW 部分的な結果を返すことができます。
参照エンティティがオブジェクトである場合、オブジェクトに対して VIEW 定義が必要です。
参照エンティティがデータベースレベルのDDLトリガーの場合、データベース上で VIEW 定義が必要です。
参照エンティティがサーバーレベルのDDLトリガーである場合、サーバー上でいかなる定義も VIEW 必要です。
例
A. 特定のエンティティを参照するエンティティを取得する
次の例では、現在のデータベース内で、指定したテーブルを参照するエンティティを取得します。
USE AdventureWorks2022;
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 AdventureWorks2022;
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)`
参照
sys.dm_sql_referenced_entities(Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)