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

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) simParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Contém uma linha para cada dependência por nome em uma entidade definida pelo usuário no banco de dados atual.Contains one row for each by-name dependency on a user-defined entity in the current database. Isso inclui dependências entre funções escalares definidas pelo usuário e compiladas nativamente, SQL ServerSQL Server e outros módulos.This includes dependences between natively compiled, scalar user-defined functions and other SQL ServerSQL Server modules. Uma dependência entre duas entidades é criada quando uma entidade, chamada de entidade referenciada, é exibida pelo nome em uma expressão SQL persistente de outra entidade, chamada de entidade de referência.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. Por exemplo, quando uma tabela for referenciada na definição de uma exibição, a exibição, como a entidade de referência, dependerá da tabela, a entidade referenciada.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. Se a tabela for descartada, a exibição será inutilizável.If the table is dropped, the view is unusable.

Para obter mais informações, consulte Funções escalares definidas pelo usuário para OLTP in-memory.For more information, see Scalar User-Defined Functions for In-Memory OLTP.

Você pode usar essa exibição do catálogo para relatar informações de dependência das seguintes entidades:You can use this catalog view to report dependency information for the following entities:

  • Entidades associadas a esquemaSchema-bound entities.

  • Entidades não associadas a esquema.Non-schema-bound entities.

  • Entidades entre banco de dados e entre servidores.Cross-database and cross-server entities. São relatados os nomes de entidade; porém, os IDs da entidade não são solucionados.Entity names are reported; however, entity IDs are not resolved.

  • Dependências de coluna em entidades associadas a esquema.Column-level dependencies on schema-bound entities. As dependências em nível de coluna para objetos não associados a esquema podem ser retornadas usando Sys. dm _sql_referenced_entities.Column-level dependencies for non-schema-bound objects can be returned by using sys.dm_sql_referenced_entities.

  • A DDL no nível de servidor é disparada quando está no contexto do banco de dados mestre.Server-level DDL triggers when in the context of the master database.

Nome da colunaColumn name Tipo de dadosData type DescriçãoDescription
referencing_idreferencing_id intint ID da entidade de referência.ID of the referencing entity. Não permite valor nulo.Is not nullable.
referencing_minor_idreferencing_minor_id intint ID da coluna quando a entidade de referência for uma coluna; caso contrário, 0.Column ID when the referencing entity is a column; otherwise 0. Não permite valor nulo.Is not nullable.
referencing_classreferencing_class tinyinttinyint Classe da entidade de referência.Class of the referencing entity.

1 = Objeto ou coluna1 = Object or column

12 = Gatilho DDL do banco de dados12 = Database DDL trigger

13 - Gatilho DDL do servidor13 = Server DDL trigger

Não permite valor nulo.Is not nullable.
referencing_class_descreferencing_class_desc nvarchar(60)nvarchar(60) Descrição da classe da entidade de referência.Description of the class of referencing entity.

OBJECT_OR_COLUMNOBJECT_OR_COLUMN

DATABASE_DDL_TRIGGERDATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGERSERVER_DDL_TRIGGER

Não permite valor nulo.Is not nullable.
is_schema_bound_referenceis_schema_bound_reference bitbit 1 = A entidade referenciada é associada a esquema.1 = Referenced entity is schema-bound.

0 = A entidade referenciada não é associada a esquema.0 = Referenced entity is non-schema-bound.

Não permite valor nulo.Is not nullable.
referenced_classreferenced_class tinyinttinyint Classe da entidade referenciada.Class of the referenced entity.

1 = Objeto ou coluna1 = Object or column

6 = Tipo6 = Type

10 = Coleção de esquema XML10 = XML schema collection

21 = Função de partição21 = Partition function

Não permite valor nulo.Is not nullable.
referenced_class_descreferenced_class_desc nvarchar(60)nvarchar(60) Descrição de classe da entidade referenciada.Description of class of referenced entity.

OBJECT_OR_COLUMNOBJECT_OR_COLUMN

TYPETYPE

XML_SCHEMA_COLLECTIONXML_SCHEMA_COLLECTION

PARTITION_FUNCTIONPARTITION_FUNCTION

Não permite valor nulo.Is not nullable.
referenced_server_namereferenced_server_name sysnamesysname Nome do servidor da entidade referenciada.Name of the server of the referenced entity.

Essa coluna é populada para dependências entre servidores que são feitas especificando um nome de quatro partes válido.This column is populated for cross-server dependencies that are made by specifying a valid four-part name. Para obter informações sobre nomes com várias partes, consulte convenções (de sintaxe Transact-)SQL Transact-SQL.For information about multipart names, see Transact-SQL Syntax Conventions (Transact-SQL).

NULL para entidades não associadas a esquema para as quais a entidade foi referenciada sem especificar um nome de quatro partes.NULL for non-schema-bound entities for which the entity was referenced without specifying a four-part name.

NULL para entidades associadas a esquema porque elas devem estar no mesmo banco de dados e, portanto, só podem ser definidas usando um nome de duas partes (esquema. objeto).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 Nome do banco de dados da entidade referenciada.Name of the database of the referenced entity.

Essa coluna é populada para referências entre servidores ou entre bancos de dados, que são feitas especificando um nome de três ou quatro partes válido.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 para referências não associadas a esquema quando especificadas usando um nome de uma ou duas partes.NULL for non-schema-bound references when specified using a one-part or two-part name.

NULL para entidades associadas a esquema porque elas devem estar no mesmo banco de dados e, portanto, só podem ser definidas usando um nome de duas partes (esquema. objeto).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 Esquema ao qual a entidade referenciada pertence.Schema in which the referenced entity belongs.

NULL para referências não associadas a esquema para as quais a entidade foi referenciada sem especificar o nome do esquema.NULL for non-schema-bound references in which the entity was referenced without specifying the schema name.

Nunca NULL para referências associadas a esquema porque devem ser definidas entidades associadas a esquema e referenciadas usando um nome de duas partes.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 Nome da entidade referenciada.Name of the referenced entity. Não permite valor nulo.Is not nullable.
referenced_idreferenced_id intint ID da entidade referenciada.ID of the referenced entity. O valor desta coluna nunca é nulo para referências associadas a esquema.The value of this column is never NULL for schema-bound references. O valor desta coluna é sempre nulo para referências entre servidores e bancos de dados.The value of this column is always NULL for cross-server and cross-database references.

NULL para referências dentro do banco de dados se a ID não puder ser determinada.NULL for references within the database if the ID cannot be determined. Para referências não associadas a esquema, a ID não pode ser resolvida nos seguintes casos:For non-schema-bound references, the ID cannot be resolved in the following cases:

A entidade referenciada não existe no banco de dados.The referenced entity does not exist in the database.

O esquema da entidade referenciada depende do esquema do chamador e é resolvido em tempo de execução.The schema of the referenced entity depends on the schema of the caller and is resolved at run time. Nesse caso, is_caller_dependent está definido como 1.In this case, is_caller_dependent is set to 1.
referenced_minor_idreferenced_minor_id intint ID da coluna referenciada quando a entidade de referência for uma coluna; caso contrário, 0.ID of the referenced column when the referencing entity is a column; otherwise 0. Não permite valor nulo.Is not nullable.

Uma entidade referenciada é uma coluna quando uma coluna é identificada pelo nome na entidade de referência, ou quando a entidade pai é usada em uma instrução 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 Indica que a associação de esquema para a entidade referenciada ocorre em tempo de execução; portanto, a resolução da ID da entidade depende do esquema do chamador.Indicates that schema binding for the referenced entity occurs at runtime; therefore, resolution of the entity ID depends on the schema of the caller. Isso ocorre quando a entidade referenciada for um procedimento armazenado, um procedimento armazenado estendido ou uma função definida pelo usuário não associada a esquema chamados em uma instrução 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 = A entidade referenciada é dependente do chamador e é resolvida em tempo de execução.1 = The referenced entity is caller dependent and is resolved at runtime. Nesse caso, referenced_id é NULL.In this case, referenced_id is NULL.

0 = A ID da entidade referenciada não é dependente do chamador.0 = The referenced entity ID is not caller dependent.

Sempre 0 para referências associadas a esquema e referências entre bancos de dados e entre servidores que especificam explicitamente um nome de esquema.Always 0 for schema-bound references and for cross-database and cross-server references that explicitly specify a schema name. Por exemplo, uma referência para uma entidade no formato EXEC MyDatabase.MySchema.MyProc não é dependente do chamador.For example, a reference to an entity in the format EXEC MyDatabase.MySchema.MyProc is not caller dependent. Porém, uma referência no formato EXEC MyDatabase..MyProc é dependente do chamador.However, a reference in the format EXEC MyDatabase..MyProc is caller dependent.
is_ambiguousis_ambiguous bitbit Indica que a referência é ambígua e pode ser resolvida em tempo de execução para uma função definida pelo usuário, um UDT (tipo definido pelo usuário) ou uma referência XQuery para uma coluna do tipo 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.

Por exemplo, suponha que a instrução SELECT Sales.GetOrder() FROM Sales.MySales esteja definida em um procedimento armazenado.For example, assume that the statement SELECT Sales.GetOrder() FROM Sales.MySales is defined in a stored procedure. Até que o procedimento armazenado seja executado, não se sabe se Sales.GetOrder() é uma função definida pelo usuário no esquema Sales ou é uma coluna denominada Sales do tipo UDT com um método denominado 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 = A referência é ambígua.1 = Reference is ambiguous.

0 = A referência não é ambígua ou a entidade pode ser associada com êxito quando a exibição é chamada.0 = Reference is unambiguous or the entity can be successfully bound when the view is called.

Sempre 0 para referências associadas ao esquema.Always 0 for schema bound references.

ComentáriosRemarks

A tabela a seguir lista os tipos de entidades para os quais as informações de dependência são criadas e mantidas.The following table lists the types of entities for which dependency information is created and maintained. As informações de dependência não são criadas nem mantidas para regras, padrões, tabelas temporárias, procedimentos armazenados temporários ou objetos do sistema.Dependency information is not created or maintained for rules, defaults, temporary tables, temporary stored procedures, or system objects.

Observação

O Azure SQL Data Warehouse e Parallel data warehouse dão suporte a tabelas, exibições, estatísticas filtradas e tipos de entidade de procedimentos armazenados Transact-SQL desta lista.Azure SQL Data Warehouse and Parallel Data Warehouse support tables, views, filtered statistics, and Transact-SQL stored procedures entity types from this list. As informações de dependência são criadas e mantidas somente para tabelas, exibições e estatísticas filtradas.Dependency information is created and maintained for tables, views, and filtered statistics only.

Tipo de entidadeEntity type Entidade de referênciaReferencing entity Entidade referenciadaReferenced entity
TabelaTable Sim*Yes* SimYes
ExibirView SimYes SimYes
Índice filtradoFiltered index Sim**Yes** NãoNo
Estatísticas filtradasFiltered statistics Sim**Yes** NãoNo
Procedimento armazenado Transact-SQLTransact-SQL***Transact-SQLTransact-SQL stored procedure*** SimYes SimYes
procedimento armazenado CLRCLR stored procedure NãoNo SimYes
Função Transact-SQLTransact-SQL definida pelo usuárioTransact-SQLTransact-SQL user-defined function SimYes SimYes
Função CLR definida pelo usuárioCLR user-defined function NãoNo SimYes
Gatilho CLR (DML e DDL)CLR trigger (DML and DDL) NãoNo NãoNo
Gatilho DML Transact-SQLTransact-SQLTransact-SQLTransact-SQL DML trigger SimYes NãoNo
Gatilho DDL no nível do banco de dados Transact-SQLTransact-SQLTransact-SQLTransact-SQL database-level DDL trigger SimYes NãoNo
Gatilho DDL no nível do servidor Transact-SQLTransact-SQLTransact-SQLTransact-SQL server-level DDL trigger SimYes NãoNo
Procedimentos armazenados estendidosExtended stored procedures NãoNo SimYes
FilaQueue NãoNo SimYes
SinônimoSynonym NãoNo SimYes
Tipo (tipo de alias e tipo de dados CLR definido pelo usuário)Type (alias and CLR user-defined type) NãoNo SimYes
Coleção de esquemas XMLXML schema collection NãoNo SimYes
Função PartitionPartition function NãoNo SimYes

*Uma tabela é rastreada como uma entidade de referência somente quando faz Transact-SQLTransact-SQL referência a um módulo, tipo definido pelo usuário ou coleção de esquema XML na definição de uma coluna computada, restrição de verificação ou restrição padrão.* 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.

* * Cada coluna usada no predicado de filtro é controlada como uma entidade de referência.** Each column used in the filter predicate is tracked as a referencing entity.

*** Procedimentos armazenados numerados com valor inteiro maior que 1 não são controlados, nem como entidade de referência nem como entidade referenciada.*** Numbered stored procedures with an integer value greater than 1 are not tracked as either a referencing or referenced entity.

PermissõesPermissions

Requer permissão VIEW DEFINITION no banco de dados e permissão SELECT em sys.sql_expression_dependencies para o banco de dados.Requires VIEW DEFINITION permission on the database and SELECT permission on sys.sql_expression_dependencies for the database. Por padrão, a permissão SELECT é concedida somente a membros da função de banco de dados fixa db_owner.By default, SELECT permission is granted only to members of the db_owner fixed database role. Quando são concedidas permissões SELECT e VIEW DEFINITION a outro usuário, o usuário autorizado pode exibir todas as dependências no banco de dados.When SELECT and VIEW DEFINITION permissions are granted to another user, the grantee can view all dependencies in the database.

ExemplosExamples

A.A. Retornando entidades referenciadas por outra entidadeReturning entities that are referenced by another entity

O exemplo a seguir retorna as tabelas e colunas referenciadas na exibição Production.vProductAndDescription.The following example returns the tables and columns referenced in the view Production.vProductAndDescription. A exibição depende das entidades (tabelas e colunas) retornadas nas colunas referenced_entity_name e 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. Retornando entidades que referenciam outra entidadeReturning entities that reference another entity

O exemplo a seguir retorna as entidades que referenciam a tabela Production.Product.The following example returns the entities that reference the table Production.Product. As entidades retornadas na coluna referencing_entity_name dependem da tabela 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. Retornando dependências entre bancos de dadosReturning cross-database dependencies

O exemplo a seguir retorna todas as dependências entre banco de dados.The following example returns all cross-database dependencies. O exemplo cria primeiramente um banco de dados db1 e dois procedimentos armazenados que referenciam tabelas dos bancos de dados db2 e db3.The example first creates the database db1 and two stored procedures that reference tables in the databases db2 and db3. A tabela sys.sql_expression_dependencies é consultada em seguida, para relatar as dependências entre bancos de dados existentes entre procedimentos e tabelas.The sys.sql_expression_dependencies table is then queried to report the cross-database dependencies between the procedures and the tables. Observe que NULL é retornado na coluna referenced_schema_name para a entidade referenciada t3 porque o nome de esquema daquela entidade não foi especificado na definição do procedimento.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  
  

Consulte tambémSee 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)