次の方法で共有


sys.dm_sql_referencing_entities (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure 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)