sys.sql_expression_dependencies (Transact-SQL)

Aplica-se a:SQL ServerInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de análise do SQL no Microsoft FabricWarehouse no Microsoft Fabric

Contém uma linha para cada dependência por nome em uma entidade definida pelo usuário no banco de dados atual. Isso inclui dependências entre funções escalares definidas pelo usuário e compiladas nativamente e outros módulos SQL Server. Uma dependência entre duas entidades é criada quando uma entidade, denominada entidade referenciada, é exibida pelo nome em uma expressão SQL persistente de outra entidade, denominada entidade de referência. 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. Se a tabela for descartada, a exibição será inutilizável.

Para obter mais informações, consulte Funções escalares definidas pelo usuário para OLTP in-memory.

Você pode usar essa exibição do catálogo para relatar informações de dependência das seguintes entidades:

  • Entidades associadas a esquema

  • Entidades não associadas a esquema.

  • Entidades entre banco de dados e entre servidores. São relatados os nomes de entidade; porém, os IDs da entidade não são solucionados.

  • Dependências de coluna em entidades associadas a esquema. As dependências em nível de coluna para objetos não associados a esquema podem ser retornadas usando sys.dm_sql_referenced_entities.

  • A DDL no nível de servidor é disparada quando está no contexto do banco de dados mestre.

Nome da coluna Tipo de dados Descrição
referencing_id int ID da entidade de referência. Não permite valor nulo.
referencing_minor_id int ID da coluna quando a entidade de referência for uma coluna; caso contrário, 0. Não permite valor nulo.
referencing_class tinyint Classe da entidade de referência.

1 = Objeto ou coluna

12 = Gatilho DDL do banco de dados

13 - Gatilho DDL do servidor

Não permite valor nulo.
referencing_class_desc nvarchar(60) Descrição da classe da entidade de referência.

OBJECT_OR_COLUMN

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

Não permite valor nulo.
is_schema_bound_reference bit 1 = A entidade referenciada é associada a esquema.

0 = A entidade referenciada não é associada a esquema.

Não permite valor nulo.
referenced_class tinyint Classe da entidade referenciada.

1 = Objeto ou coluna

6 = Tipo

10 = Coleção de esquema XML

21 = Função de partição

Não permite valor nulo.
referenced_class_desc nvarchar(60) Descrição de classe da entidade referenciada.

OBJECT_OR_COLUMN

TYPE

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

Não permite valor nulo.
referenced_server_name sysname Nome do servidor da entidade referenciada.

Essa coluna é populada para dependências entre servidores que são feitas especificando um nome de quatro partes válido. Para obter informações sobre nomes de várias partes, confira Convenções da sintaxe 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 para entidades associadas a esquema porque elas devem estar no mesmo banco de dados e, portanto, só podem ser definidas com um nome de duas partes (schema.object).
referenced_database_name sysname Nome do banco de dados da entidade referenciada.

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.

NULL para referências não associadas a esquema quando especificadas usando um nome de uma ou duas partes.

NULL para entidades associadas a esquema porque elas devem estar no mesmo banco de dados e, portanto, só podem ser definidas com um nome de duas partes (schema.object).
referenced_schema_name sysname Esquema ao qual a entidade referenciada pertence.

NULL para referências não associadas a esquema para as quais a entidade foi referenciada sem especificar o nome do esquema.

Nunca NULL para referências associadas a esquema porque devem ser definidas entidades associadas a esquema e referenciadas usando um nome de duas partes.
referenced_entity_name sysname Nome da entidade referenciada. Não permite valor nulo.
referenced_id int ID da entidade referenciada. O valor dessa coluna nunca é NULL para referências associadas ao esquema. O valor dessa coluna é sempre NULL para referências entre servidores e entre bancos de dados.

NULL para referências dentro do banco de dados se a ID não puder ser determinada. Para referências não associadas a esquema, a ID não pode ser resolvida nos seguintes casos:

A entidade referenciada não existe no banco de dados.

O esquema da entidade referenciada depende do esquema do chamador e é resolvido em tempo de execução. Nesse caso, is_caller_dependent está definido como 1.
referenced_minor_id int ID da coluna referenciada quando a entidade de referência for uma coluna; caso contrário, 0. Não permite valor nulo.

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 *.
is_caller_dependent bit Indica que a associação de esquema para a entidade referenciada ocorre em runtime; portanto, a resolução da ID da entidade depende do esquema do chamador. 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.

1 = A entidade referenciada é dependente do chamador e é resolvida em runtime. Nesse caso, referenced_id é NULL.

0 = A ID da entidade referenciada não é dependente do chamador.

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. Por exemplo, uma referência para uma entidade no formato EXEC MyDatabase.MySchema.MyProc não é dependente do chamador. Porém, uma referência no formato EXEC MyDatabase..MyProc é dependente do chamador.
is_ambiguous bit 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.

Por exemplo, suponha que a instrução SELECT Sales.GetOrder() FROM Sales.MySales esteja definida em um procedimento armazenado. 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().

1 = A referência é ambígua.

0 = A referência não é ambígua ou a entidade pode ser associada com êxito quando a exibição é chamada.

Sempre 0 para referências associadas a esquema.

Comentários

A tabela a seguir lista os tipos de entidades para os quais as informações de dependência são criadas e mantidas. 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.

Observação

Azure Synapse Analytics e Parallel Data Warehouse dão suporte a tabelas, exibições, estatísticas filtradas e tipos de entidade de procedimentos armazenados Transact-SQL nessa lista. As informações de dependência são criadas e mantidas apenas para tabelas, exibições e estatísticas filtradas.

Tipo de entidade Entidade de referência Entidade referenciada
Tabela Sim* Sim
Exibir Yes Yes
Índice filtrado Sim** Não
Estatísticas filtradas Sim** No
Procedimentos armazenados Transact-SQL*** Yes Yes
procedimento armazenado CLR No Sim
Funções Transact-SQL definidas por usuário Sim Yes
Função CLR definida pelo usuário No Sim
Gatilho CLR (DML e DDL) No Não
Gatilho DML do Transact-SQL Yes No
Gatilho DDL de nível de banco de dados do Transact-SQL Yes No
Gatilho DDL de nível de servidor do Transact-SQL Yes Não
Procedimentos armazenados estendidos Não Yes
Fila No Yes
Sinônimo No Yes
Tipo (tipo de alias e tipo de dados CLR definido pelo usuário) No Yes
Coleção de esquemas XML No Yes
Função de partição No Yes

* Uma tabela é controlada como entidade de referência apenas quando se refere a um módulo Transact-SQL, tipo definido pelo usuário ou coleção de esquemas XML na definição de uma coluna computada, restrição CHECK ou restrição DEFAULT.

* * Cada coluna usada no predicado de filtro é controlada como uma entidade de referência.

*** Procedimentos armazenados numerados com valor inteiro maior que 1 não são controlados, nem como entidade de referência nem como entidade referenciada.

Permissões

Requer permissão VIEW DEFINITION no banco de dados e permissão SELECT em sys.sql_expression_dependencies para o banco de dados. Por padrão, a permissão SELECT é concedida somente a membros da função de banco de dados fixa db_owner. 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.

Exemplos

a. Retornando entidades referenciadas por outra entidade

O exemplo a seguir retorna as tabelas e colunas referenciadas na exibição Production.vProductAndDescription. A exibição depende das entidades (tabelas e colunas) retornadas nas colunas referenced_entity_name e referenced_column_name.

USE AdventureWorks2022;  
GO  
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_description,   
    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. Retornando entidades que referenciam outra entidade

O exemplo a seguir retorna as entidades que referenciam a tabela Production.Product. As entidades retornadas na coluna referencing_entity_name dependem da tabela Product.

USE AdventureWorks2022;  
GO  
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,  
    OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_description,   
    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. Retornando dependências entre bancos de dados

O exemplo a seguir retorna todas as dependências entre banco de dados. O exemplo cria primeiramente um banco de dados db1 e dois procedimentos armazenados que referenciam tabelas dos bancos de dados db2 e db3. A tabela sys.sql_expression_dependencies é consultada em seguida, para relatar as dependências entre bancos de dados existentes entre procedimentos e tabelas. 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.

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ém

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