sys.sql_expression_dependencies (Transact-SQL)sys.sql_expression_dependencies (Transact-SQL)

適用対象: ○SQL Server XAzure SQL Database ○Azure SQL Data Warehouse ○Parallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

ユーザー定義エンティティに対する名前による依存関係ごとに 1 つの行を現在のデータベースに格納します。Contains one row for each by-name dependency on a user-defined entity in the current database. これには、ネイティブコンパイル、スカラーユーザー定義関数、およびそのSQL ServerSQL Server他のモジュール間の依存関係が含まれます。This includes dependences between natively compiled, scalar user-defined functions and other SQL ServerSQL Server modules. 2つのエンティティ間の依存関係は、参照先エンティティと呼ばれる1つのエンティティが、別のエンティティの永続化された SQL 式 (参照元エンティティと呼ばれます) で名前によって表示される場合に作成されます。A dependency between two entities is created when one entity, called the referenced entity, appears by name in a persisted SQL expression of another entity, called the referencing entity. たとえば、ビューの定義内でテーブルが参照されている場合、参照元エンティティであるビューは、参照先エンティティであるテーブルに依存します。For example, when a table is referenced in the definition of a view, the view, as the referencing entity, depends on the table, the referenced entity. テーブルが削除された場合、ビューは使用できなくなります。If the table is dropped, the view is unusable.

詳しくは、「インメモリ OLTP でのユーザー定義のスカラー関数」をご覧ください。For more information, see Scalar User-Defined Functions for In-Memory OLTP.

このカタログ ビューを使用すると、次のエンティティについて依存関係情報をレポートできます。You can use this catalog view to report dependency information for the following entities:

  • スキーマ バインド エンティティ。Schema-bound entities.

  • 非スキーマ バインド エンティティ。Non-schema-bound entities.

  • 複数のデータベースやサーバーにまたがるエンティティ。Cross-database and cross-server entities. エンティティ名はレポートされますが、エンティティ ID は解決されません。Entity names are reported; however, entity IDs are not resolved.

  • スキーマ バインド エンティティの列レベルの依存関係。Column-level dependencies on schema-bound entities. スキーマバインドされていないオブジェクトの列レベルの依存関係を返すには、そのエンティティを使用します。Column-level dependencies for non-schema-bound objects can be returned by using sys.dm_sql_referenced_entities.

  • サーバーレベルの DDL トリガー (master データベースのコンテキスト内)。Server-level DDL triggers when in the context of the master database.

列名Column name データ型Data type 説明Description
referencing_idreferencing_id intint 参照元エンティティの ID。ID of the referencing entity. NULL 値は許可されません。Is not nullable.
referencing_minor_idreferencing_minor_id intint 参照元エンティティが列の場合は列 ID。それ以外の場合は 0。Column ID when the referencing entity is a column; otherwise 0. NULL 値は許可されません。Is not nullable.
referencing_classreferencing_class tinyinttinyint 参照元エンティティのクラス。Class of the referencing entity.

1 = オブジェクトまたは列1 = Object or column

12 = データベース DDL トリガー12 = Database DDL trigger

13 = サーバー DDL トリガー13 = Server DDL trigger

NULL 値は許可されません。Is not nullable.
referencing_class_descreferencing_class_desc nvarchar(60)nvarchar(60) 参照元エンティティのクラスの説明。Description of the class of referencing entity.

OBJECT_OR_COLUMNOBJECT_OR_COLUMN

DATABASE_DDL_TRIGGERDATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGERSERVER_DDL_TRIGGER

NULL 値は許可されません。Is not nullable.
is_schema_bound_referenceis_schema_bound_reference bitbit 1 = 参照先エンティティはスキーマ バインドです。1 = Referenced entity is schema-bound.

0 = 参照先エンティティは非スキーマ バインドです。0 = Referenced entity is non-schema-bound.

NULL 値は許可されません。Is not nullable.
referenced_classreferenced_class tinyinttinyint 参照先エンティティのクラス。Class of the referenced entity.

1 = オブジェクトまたは列1 = Object or column

6 = 型6 = Type

10 = XML スキーマ コレクション10 = XML schema collection

21 = パーティション関数21 = Partition function

NULL 値は許可されません。Is not nullable.
referenced_class_descreferenced_class_desc nvarchar(60)nvarchar(60) 参照先エンティティのクラスの説明。Description of class of referenced entity.

OBJECT_OR_COLUMNOBJECT_OR_COLUMN

TYPETYPE

XML_SCHEMA_COLLECTIONXML_SCHEMA_COLLECTION

PARTITION_FUNCTIONPARTITION_FUNCTION

NULL 値は許可されません。Is not nullable.
referenced_server_namereferenced_server_name sysnamesysname 参照先エンティティのサーバー名。Name of the server of the referenced entity.

有効な 4 部構成の名前を指定することによって作成されたサーバー間依存関係については、この列に値が格納されます。This column is populated for cross-server dependencies that are made by specifying a valid four-part name. マルチパート名の詳細については、「transact-sql構文表記(規則)」を参照してください。For information about multipart names, see Transact-SQL Syntax Conventions (Transact-SQL).

4 部構成の名前を指定せずにエンティティが参照される非スキーマ バインド エンティティの場合は NULL。NULL for non-schema-bound entities for which the entity was referenced without specifying a four-part name.

スキーマバインドエンティティの場合は NULL。同じデータベース内に存在する必要があるため、2つの部分 (schema. object) 名を使用してのみ定義できます。NULL for schema-bound entities because they must be in the same database and therefore can only be defined using a two-part (schema.object) name.
referenced_database_namereferenced_database_name sysnamesysname 参照先エンティティのデータベース名。Name of the database of the referenced entity.

有効な 3 部構成または 4 部構成の名前を指定することによって作成された複数データベースまたは複数サーバーにまたがる参照については、この列に値が格納されます。This column is populated for cross-database or cross-server references that are made by specifying a valid three-part or four-part name.

1 部構成または 2 部構成の名前を使って指定された非スキーマ バインド参照の場合は NULL。NULL for non-schema-bound references when specified using a one-part or two-part name.

スキーマバインドエンティティの場合は NULL。同じデータベース内に存在する必要があるため、2つの部分 (schema. object) 名を使用してのみ定義できます。NULL for schema-bound entities because they must be in the same database and therefore can only be defined using a two-part (schema.object) name.
referenced_schema_namereferenced_schema_name sysnamesysname 参照先エンティティが属しているスキーマ。Schema in which the referenced entity belongs.

スキーマ名を指定せずにエンティティが参照される非スキーマ バインド参照の場合は NULL。NULL for non-schema-bound references in which the entity was referenced without specifying the schema name.

スキーマ バインド エンティティは 2 つの部分で構成される名前を使用して定義および参照する必要があるので、スキーマ バインド参照の場合、NULL にすることはできません。Never NULL for schema-bound references because schema-bound entities must be defined and referenced by using a two-part name.
referenced_entity_namereferenced_entity_name sysnamesysname 参照先エンティティの名前。Name of the referenced entity. NULL 値は許可されません。Is not nullable.
referenced_idreferenced_id intint 参照先エンティティの ID。ID of the referenced entity. スキーマバインド参照の場合、この列の値は NULL になりません。The value of this column is never NULL for schema-bound references. サーバー間およびデータベース間の参照の場合、この列の値は常に NULL になります。The value of this column is always NULL for cross-server and cross-database references.

データベース内の参照で ID を判別できない場合は、NULL。NULL for references within the database if the ID cannot be determined. 非スキーマ バインド参照では、次の場合に ID を解決できません。For non-schema-bound references, the ID cannot be resolved in the following cases:

参照先エンティティがデータベースに存在しない。The referenced entity does not exist in the database.

参照先エンティティのスキーマが呼び出し元に依存し、実行時に解決される。The schema of the referenced entity depends on the schema of the caller and is resolved at run time. この場合、is_caller_dependent は 1 に設定されます。In this case, is_caller_dependent is set to 1.
referenced_minor_idreferenced_minor_id intint 参照元エンティティが列の場合は参照される列の ID。それ以外の場合は 0。ID of the referenced column when the referencing entity is a column; otherwise 0. NULL 値は許可されません。Is not nullable.

参照元エンティティの中で列が名前で指定されていた場合、または SELECT * ステートメントの中で親エンティティが使用されていた場合、参照先エンティティは列になります。A referenced entity is a column when a column is identified by name in the referencing entity, or when the parent entity is used in a SELECT * statement.
is_caller_dependentis_caller_dependent bitbit 参照先エンティティのスキーマ バインドが実行時に行われるため、エンティティ ID の解決が呼び出し元のスキーマに依存することを示します。Indicates that schema binding for the referenced entity occurs at runtime; therefore, resolution of the entity ID depends on the schema of the caller. これが該当するのは、参照先エンティティがストアド プロシージャ、拡張ストアド プロシージャ、または、EXECUTE ステートメント内で呼び出される非スキーマ バインド ユーザー定義関数である場合です。This occurs when the referenced entity is a stored procedure, extended stored procedure, or a non-schema-bound user-defined function called in an EXECUTE statement.

1 = 参照先エンティティは呼び出し元に依存し、実行時に解決されます。1 = The referenced entity is caller dependent and is resolved at runtime. この場合、referenced_id は NULL です。In this case, referenced_id is NULL.

0 = 参照先エンティティの ID は呼び出し元に依存しません。0 = The referenced entity ID is not caller dependent.

スキーマ バインド参照のほか、スキーマ名を明示的に指定するデータベース間参照やサーバー間参照の場合は常に 0 になります。Always 0 for schema-bound references and for cross-database and cross-server references that explicitly specify a schema name. たとえば、EXEC MyDatabase.MySchema.MyProc 形式のエンティティ参照は呼び出し元に依存しません。For example, a reference to an entity in the format EXEC MyDatabase.MySchema.MyProc is not caller dependent. ただし、EXEC MyDatabase..MyProc 形式の参照は呼び出し元に依存します。However, a reference in the format EXEC MyDatabase..MyProc is caller dependent.
is_ambiguousis_ambiguous bitbit 参照があいまいであり、実行時にユーザー定義関数、ユーザー定義型 (UDT)、またはxml型の列への xquery 参照に解決できることを示します。Indicates the reference is ambiguous and can resolve at run time to a user-defined function, a user-defined type (UDT), or an xquery reference to a column of type xml.

たとえば、ストアドプロシージャでステートメントSELECT Sales.GetOrder() FROM Sales.MySalesが定義されているとします。For example, assume that the statement SELECT Sales.GetOrder() FROM Sales.MySales is defined in a stored procedure. Sales.GetOrder()Sales スキーマ内のユーザー定義関数なのか、Sales という名前のメソッドを持つ UDT 型の GetOrder() という名前の列なのかは、ストアド プロシージャが実行されるまで不明です。Until the stored procedure is executed, it is not known whether Sales.GetOrder() is a user-defined function in the Sales schema or column named Sales of type UDT with a method named GetOrder().

1 = 参照はあいまいです。1 = Reference is ambiguous.

0 = 参照は明確です。つまり、ビューを呼び出したときに、エンティティを正しくバインドできます。0 = Reference is unambiguous or the entity can be successfully bound when the view is called.

スキーマバインド参照の場合は常に0です。Always 0 for schema bound references.

コメントRemarks

次の表に、依存関係情報が作成および管理されるエンティティの種類を示します。The following table lists the types of entities for which dependency information is created and maintained. ルール、既定値、一時テーブル、一時ストアド プロシージャ、またはシステム オブジェクトについては、依存関係情報は作成も管理もされません。Dependency information is not created or maintained for rules, defaults, temporary tables, temporary stored procedures, or system objects.

注意

Azure SQL Data Warehouse および並列データウェアハウスでは、この一覧からテーブル、ビュー、フィルター選択された統計情報、および Transact-sql ストアドプロシージャのエンティティ型をサポートしています。Azure SQL Data Warehouse and Parallel Data Warehouse support tables, views, filtered statistics, and Transact-SQL stored procedures entity types from this list. 依存関係情報は、テーブル、ビュー、およびフィルター選択された統計情報に対してのみ作成および管理されます。Dependency information is created and maintained for tables, views, and filtered statistics only.

エンティティの種類Entity type 参照元エンティティReferencing entity 参照先エンティティReferenced entity
テーブルTable 可*Yes* はいYes
表示View はいYes はいYes
フィルター選択されたインデックスFiltered index 可**Yes** いいえNo
フィルター選択された統計情報Filtered statistics 可**Yes** いいえNo
Transact-SQLTransact-SQL ストアド プロシージャ***stored procedure*** はいYes はいYes
CLR ストアド プロシージャ (CLR stored procedure)CLR stored procedure いいえNo はいYes
Transact-SQLTransact-SQL ユーザー定義関数user-defined function はいYes はいYes
CLR ユーザー定義関数CLR user-defined function いいえNo はいYes
CLR トリガー (DML および DDL)CLR trigger (DML and DDL) いいえNo いいえNo
Transact-SQLTransact-SQL DML トリガーDML trigger はいYes いいえNo
Transact-SQLTransact-SQL データベース レベルの DDL トリガーdatabase-level DDL trigger はいYes いいえNo
Transact-SQLTransact-SQL サーバー レベルの DDL トリガーserver-level DDL trigger はいYes いいえNo
拡張ストアド プロシージャExtended stored procedures いいえNo はいYes
キューQueue いいえNo はいYes
シノニムSynonym いいえNo はいYes
型 (別名および CLR ユーザー定義型)Type (alias and CLR user-defined type) いいえNo はいYes
XML スキーマ コレクションXML schema collection いいえNo はいYes
パーティション関数Partition function いいえNo はいYes

*テーブルは、計算列、check 制約、または DEFAULT 制約Transact-SQLTransact-SQLの定義でモジュール、ユーザー定義型、または XML スキーマコレクションを参照している場合にのみ、参照元エンティティとして追跡されます。* A table is tracked as a referencing entity only when it references a Transact-SQLTransact-SQL module, user-defined type, or XML schema collection in the definition of a computed column, CHECK constraint, or DEFAULT constraint.

** フィルター述語で使用する各列は、参照元エンティティとして追跡されます。** Each column used in the filter predicate is tracked as a referencing entity.

*** 1 より大きな整数値を持つ番号付きストアド プロシージャは、参照元エンティティとしても、参照先エンティティとしても追跡されません。*** Numbered stored procedures with an integer value greater than 1 are not tracked as either a referencing or referenced entity.

アクセス許可Permissions

データベースに対する VIEW DEFINITION 権限およびデータベースの sys.sql_expression_dependencies に対する SELECT 権限が必要です。Requires VIEW DEFINITION permission on the database and SELECT permission on sys.sql_expression_dependencies for the database. 既定では、SELECT 権限は db_owner 固定データベース ロールのメンバーだけに与えられます。By default, SELECT permission is granted only to members of the db_owner fixed database role. SELECT 権限と VIEW DEFINITION 権限が別のユーザーに与えられている場合、権限が許可されているユーザーはデータベース内のすべての依存関係を表示できます。When SELECT and VIEW DEFINITION permissions are granted to another user, the grantee can view all dependencies in the database.

使用例Examples

A.A. 別のエンティティによって参照されるエンティティを取得するReturning entities that are referenced by another entity

次の例では、ビュー Production.vProductAndDescription 内で参照されているテーブルおよび列を取得します。The following example returns the tables and columns referenced in the view Production.vProductAndDescription. ビューは、列referenced_entity_nameおよびreferenced_column_name列に返されるエンティティ (テーブルおよび列) によって異なります。The view depends on the entities (tables and columns) returned in the referenced_entity_name and referenced_column_name columns.

USE AdventureWorks2012;  
GO  
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_desciption,   
    COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
    referencing_class_desc,  
    referenced_server_name, referenced_database_name, referenced_schema_name,  
    referenced_entity_name,   
    COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
    is_caller_dependent, is_ambiguous  
FROM sys.sql_expression_dependencies AS sed  
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
WHERE referencing_id = OBJECT_ID(N'Production.vProductAndDescription');  
GO  
  

B.B. 別のエンティティを参照するエンティティを取得するReturning entities that reference another entity

次の例では、テーブル Production.Product を参照するエンティティを取得します。The following example returns the entities that reference the table Production.Product. referencing_entity_name 列に返されるエンティティは、Product テーブルに依存します。The entities returned in the referencing_entity_name column depend on the Product table.

USE AdventureWorks2012;  
GO  
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,  
    OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_desciption,   
    COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
    referencing_class_desc, referenced_class_desc,  
    referenced_server_name, referenced_database_name, referenced_schema_name,  
    referenced_entity_name,   
    COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
    is_caller_dependent, is_ambiguous  
FROM sys.sql_expression_dependencies AS sed  
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
WHERE referenced_id = OBJECT_ID(N'Production.Product');  
GO  
  

C.C. データベース間の依存関係を取得するReturning cross-database dependencies

次の例では、データベース間の依存関係をすべて取得します。The following example returns all cross-database dependencies. この例では、まずdb1データベースを作成し、データベースdb2db3のテーブルを参照する2つのストアドプロシージャを作成します。The example first creates the database db1 and two stored procedures that reference tables in the databases db2 and db3. 次に、sys.sql_expression_dependencies テーブルに対してクエリを実行して、プロシージャとテーブルの間のデータベース間依存関係をレポートします。The sys.sql_expression_dependencies table is then queried to report the cross-database dependencies between the procedures and the tables. 参照先エンティティ referenced_schema_namet3 列に NULL が返されることに注意してください。これは、プロシージャの定義の中でそのエンティティにスキーマ名が指定されていないためです。Notice that NULL is returned in the referenced_schema_name column for the referenced entity t3 because a schema name was not specified for that entity in the definition of the procedure.

CREATE DATABASE db1;  
GO  
USE db1;  
GO  
CREATE PROCEDURE p1 AS SELECT * FROM db2.s1.t1;  
GO  
CREATE PROCEDURE p2 AS  
    UPDATE db3..t3  
    SET c1 = c1 + 1;  
GO  
SELECT OBJECT_NAME (referencing_id),referenced_database_name,   
    referenced_schema_name, referenced_entity_name  
FROM sys.sql_expression_dependencies  
WHERE referenced_database_name IS NOT NULL;  
GO  
USE master;  
GO  
DROP DATABASE db1;  
GO  
  

参照See Also

sys.dm_sql_referenced_entities (Transact-SQL) sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL)sys.dm_sql_referencing_entities (Transact-SQL)