Представление каталога sys.sql_expression_dependencies (Transact-SQL)sys.sql_expression_dependencies (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL Azure даAzure Synapse Analytics (хранилище данных SQL) даParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Содержит по одной строке для каждой именованной зависимости определяемой пользователем сущности в текущей базе данных.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. Зависимость между двумя сущностями создается, когда одна сущность, называемая упоминаемой сущностью, отображается по имени в сохраненном выражении 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. Выводятся имена сущностей без идентификаторов;Entity names are reported; however, entity IDs are not resolved.

  • зависимости на уровне столбцов в сущностях, привязанных к схеме.Column-level dependencies on schema-bound entities. Зависимости уровня столбца для объектов, не привязанных к схеме, могут возвращаться с помощью представления sys. DM _sql_referenced_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 of the referencing entity. Не допускает значение NULL.Is not nullable.
referencing_minor_idreferencing_minor_id intint Идентификатор столбца, если ссылающаяся сущность является столбцом; в противном случае — 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 = серверный триггер DDL13 = 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 = коллекция схем XML10 = 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

ТИПTYPE

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.

Этот столбец заполняется для межсерверных зависимостей, которые создаются путем задания допустимого четырехкомпонентного имени.This column is populated for cross-server dependencies that are made by specifying a valid four-part name. Сведения о составных именах см. в разделе соглашения (о синтаксисе Transact)-SQL Transact-SQL.For information about multipart names, see Transact-SQL Syntax Conventions (Transact-SQL).

Значение NULL для не привязанных к схеме сущностей, ссылка на которые осуществляется без указания четырехкомпонентного имени.NULL for non-schema-bound entities for which the entity was referenced without specifying a four-part name.

Значение NULL для сущностей, привязанных к схеме, так как они должны находиться в одной базе данных и поэтому могут быть определены только с помощью имени из двух частей (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.

Этот столбец заполняется для межбазовых и межсерверных ссылок, которые задаются путем указания допустимого трехкомпонентного или четырехкомпонентного имени.This column is populated for cross-database or cross-server references that are made by specifying a valid three-part or four-part name.

Имеет значение NULL для не привязанных к схеме ссылок, задаваемых с помощью однокомпонентного или двухкомпонентного имени.NULL for non-schema-bound references when specified using a one-part or two-part name.

Значение NULL для сущностей, привязанных к схеме, так как они должны находиться в одной базе данных и поэтому могут быть определены только с помощью имени из двух частей (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.

Никогда не имеет значение 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 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.

Имеет значение NULL для ссылок в пределах базы данных, когда не удается определить идентификатор.NULL for references within the database if the ID cannot be determined. Для ссылок, не привязанных к схеме, идентификатор не удается разрешить в следующих случаях.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 Идентификатор ссылочного столбца в случае, если ссылающейся сущностью является столбец; в противном случае — 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 Указывает, что привязка к схеме для упоминаемой сущности происходит во время выполнения, и поэтому разрешение идентификатора сущности зависит от схемы ссылающейся сущности.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 = идентификатор упоминаемой сущности не зависит от вызывающего объекта.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) или ссылку XQuery на столбец типа XML.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 определяемого пользователем типа с методом 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.

Примечание

Хранилище данных SQL Azure и Параллельное хранилище данных поддерживают таблицы, представления, отфильтрованную статистику и типы сущностей хранимых процедур 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***Transact-SQLTransact-SQL stored procedure*** ДаYes ДаYes
Хранимая процедура CLRCLR stored procedure НетNo ДаYes
Определяемая пользователем функция Transact-SQLTransact-SQLTransact-SQLTransact-SQL user-defined function ДаYes ДаYes
Определяемая пользователем функция CLRCLR user-defined function НетNo ДаYes
Триггер CLR (DML и DDL)CLR trigger (DML and DDL) НетNo НетNo
Триггер DML Transact-SQLTransact-SQLTransact-SQLTransact-SQL DML trigger ДаYes НетNo
Триггер DDL Transact-SQLTransact-SQL уровня базы данныхTransact-SQLTransact-SQL database-level DDL trigger ДаYes НетNo
Триггер DDL Transact-SQLTransact-SQL уровня сервераTransact-SQLTransact-SQL 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
Коллекция схем XMLXML schema collection НетNo ДаYes
Функция секционированияPartition function НетNo ДаYes

*Таблица обрабатывается как ссылающаяся сущность, только если она ссылается 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 в базе данных и разрешение SELECT на представление sys.sql_expression_dependencies в базе данных.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. Возвращение сущностей, ссылающихся на другую сущность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. Возвращение межбазовых зависимостейReturning cross-database dependencies

В следующем примере возвращаются все межбазовые зависимости.The following example returns all cross-database dependencies. Вначале в примере создается база данных db1 и две хранимые процедуры, которые ссылаются на таблицы в базах данных db2 и db3.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_name для упоминаемой сущности t3 возвращается значение 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)