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。
構文
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 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)
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示