sys.dm_sql_referencing_entities (Transact-SQL)

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

別のユーザー定義エンティティを名前で参照する、現在のデータベース内のエンティティごとに 1 行を返します。 2 つのエンティティ間の依存関係は、一方のエンティティ (参照先エンティティ) の名前が、もう一方のエンティティ (参照元エンティティ) の保存されている SQL 式の中で参照された場合に形成されます。 たとえば、ユーザー定義型 (UDT) が参照先エンティティとして指定されている場合、この関数は、その定義内の名前でその型を参照する各ユーザー定義エンティティを返します。 関数は、指定したエンティティを参照する可能性がある他のデータベース内のエンティティを返しません。 サーバー レベルの DDL トリガーを参照エンティティとして返すには、マスター データベースのコンテキストでこの関数を実行する必要があります。

この動的管理関数に参照先エンティティを指定すると、現在のデータベース内で、そのエンティティを参照する次の種類のエンティティをレポートできます。

  • スキーマ バインドまたは非スキーマ バインド エンティティ

  • データベース レベルの DDL トリガー

  • サーバー レベルの DDL トリガー

適用対象: SQL Server ( SQL Server 2008 (10.0.x) 以降)、SQL Database。

Transact-SQL 構文表記規則

構文

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_namenvarchar(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 DEFINITION を持っている場合は、部分的な結果を返すことができます。

  • 参照元エンティティがオブジェクトの場合は、オブジェクトに対して VIEW DEFINITION が必要です。

  • 参照元エンティティがデータベース レベルの DDL トリガーである場合は、データベースに対する VIEW DEFINITION が必要です。

  • 参照元エンティティがサーバー レベルの DDL トリガーである場合は、サーバーで VIEW ANY DEFINITION が必要です。

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)