sys.sql_expression_dependencies (Transact-SQL)
Aplica-se a:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)ponto de extremidade de análise SQL no Microsoft FabricWarehouse no Microsoft Fabric
Contém uma linha para cada dependência de 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 outros módulos do SQL Server compilados nativamente. Uma dependência entre duas entidades é criada quando uma entidade, chamada entidade referenciada, aparece pelo nome em uma expressão SQL persistente de outra entidade, chamada de entidade de referência . Por exemplo, quando uma tabela é referenciada na definição de um modo de exibição, o modo de exibição, como a entidade de referência, depende da tabela, a entidade referenciada. Se a tabela for descartada, a exibição ficará inutilizável.
Para obter mais informações, consulte Scalar User-Defined Functions for In-Memory OLTP.
Você pode usar essa exibição de catálogo para relatar informações de dependência para as seguintes entidades:
Entidades vinculadas ao esquema.
Entidades não vinculadas ao esquema.
Entidades entre bancos de dados e entre servidores. Os nomes das entidades são relatados; no entanto, os IDs de entidade não são resolvidos.
Dependências em nível de coluna em entidades ligadas ao esquema. As dependências em nível de coluna para objetos não vinculados ao esquema podem ser retornadas usando sys.dm_sql_referenced_entities.
DDL no nível do servidor é acionada quando 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 é anulável. |
referencing_minor_id | int | ID da coluna quando a entidade de referência é uma coluna; caso contrário, 0. Não é anulável. |
referencing_class | minúsculo | Classe da entidade de referência. 1 = Objeto ou coluna 12 = Gatilho DDL do banco de dados 13 = Gatilho DDL do servidor Não é anulável. |
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 é anulável. |
is_schema_bound_reference | pouco | 1 = A entidade referenciada está ligada ao esquema. 0 = A entidade referenciada não está vinculada ao esquema. Não é anulável. |
referenced_class | minúsculo | Classe da entidade referenciada. 1 = Objeto ou coluna 6 = Tipo 10 = Coleção de esquema XML 21 = Função de partição Não é anulável. |
referenced_class_desc | nvarchar(60) | Descrição da classe da entidade referenciada. OBJECT_OR_COLUMN TIPO XML_SCHEMA_COLLECTION PARTITION_FUNCTION Não é anulável. |
referenced_server_name | sysname | Nome do servidor da entidade referenciada. Esta coluna é preenchida para dependências entre servidores que são feitas especificando um nome válido de quatro partes. Para obter informações sobre nomes com várias partes, consulte Transact-SQL convenções de sintaxe. NULL para entidades não vinculadas ao esquema para as quais a entidade foi referenciada sem especificar um nome de quatro partes. NULL para entidades ligadas ao esquema porque elas devem estar no mesmo banco de dados e, portanto, só podem ser definidas usando um nome de duas partes (schema.object). |
referenced_database_name | sysname | Nome do banco de dados da entidade referenciada. Esta coluna é preenchida para referências entre bancos de dados ou servidores que são feitas especificando um nome válido de três ou quatro partes. NULL para referências não vinculadas ao esquema quando especificado usando um nome de uma ou duas partes. NULL para entidades ligadas ao esquema porque elas devem estar no mesmo banco de dados e, portanto, só podem ser definidas usando um nome de duas partes (schema.object). |
referenced_schema_name | sysname | Esquema ao qual a entidade referenciada pertence. NULL para referências não vinculadas ao esquema nas quais a entidade foi referenciada sem especificar o nome do esquema. Nunca NULL para referências vinculadas a esquema porque as entidades vinculadas ao esquema devem ser definidas e referenciadas usando um nome de duas partes. |
referenced_entity_name | sysname | Nome da entidade referenciada. Não é anulável. |
referenced_id | int | ID da entidade referenciada. O valor desta coluna nunca é NULL para referências associadas ao esquema. O valor desta coluna é sempre NULL para referências entre servidores e entre bancos de dados. NULL para referências dentro do banco de dados se o ID não puder ser determinado. Para referências não vinculadas ao 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 é definido como 1. |
referenced_minor_id | int | ID da coluna referenciada quando a entidade de referência é uma coluna; caso contrário, 0. Não é anulável. 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 | pouco | Indica que a vinculação de esquema para a entidade referenciada ocorre em tempo de execução; portanto, a resolução do ID da entidade depende do esquema do chamador. Isso ocorre quando a entidade referenciada é um procedimento armazenado, um procedimento armazenado estendido ou uma função definida pelo usuário não vinculada ao esquema chamada em uma instrução EXECUTE. 1 = A entidade referenciada é dependente do chamador e é resolvida em tempo de execução. Neste caso, referenced_id é NULL. 0 = O ID da entidade referenciada não depende do chamador. Sempre 0 para referências associadas ao esquema e para referências entre bancos de dados e entre servidores que especificam explicitamente um nome de esquema. Por exemplo, uma referência a uma entidade no formato EXEC MyDatabase.MySchema.MyProc não depende do chamador. No entanto, uma referência no formato EXEC MyDatabase..MyProc depende do chamador. |
is_ambiguous | pouco | 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 tipo definido pelo usuário (UDT) ou uma referência xquery para uma coluna do tipo xml. Por exemplo, suponha que a instrução SELECT Sales.GetOrder() FROM Sales.MySales é 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 coluna chamada Sales do tipo UDT com um método chamado GetOrder() .1 = A referência é ambígua. 0 = A referência é inequívoca ou a entidade pode ser ligada com êxito quando a exibição é chamada. Sempre 0 para referências vinculadas ao esquema. |
Comentários
A tabela a seguir lista os tipos de entidades para as quais as informações de dependência são criadas e mantidas. As informações de dependência não são criadas ou mantidas para regras, padrões, tabelas temporárias, procedimentos armazenados temporários ou objetos do sistema.
Observação
O Azure Synapse Analytics e o Parallel Data Warehouse suportam tabelas, vistas, estatísticas filtradas e Transact-SQL tipos de entidade de procedimentos armazenados a partir desta 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 |
Visão | Sim | Sim |
Índice filtrado | Sim** | Não |
Estatísticas filtradas | Sim** | Não |
Transact-SQL procedimento armazenado*** | Sim | Sim |
Procedimento armazenado CLR | Não | Sim |
Transact-SQL função definida pelo utilizador | Sim | Sim |
Função CLR definida pelo usuário | Não | Sim |
Gatilho CLR (DML e DDL) | Não | Não |
Transact-SQL Gatilho DML | Sim | Não |
Transact-SQL gatilho DDL no nível de banco de dados | Sim | Não |
Transact-SQL gatilho DDL no nível do servidor | Sim | Não |
Procedimentos armazenados estendidos | Não | Sim |
Fila | Não | Sim |
Sinónimo | Não | Sim |
Tipo (alias e tipo CLR definido pelo usuário) | Não | Sim |
Coleção de esquema XML | Não | Sim |
Função de partição | Não | Sim |
* Uma tabela é rastreada como uma entidade de referência somente quando faz referência a um módulo Transact-SQL, tipo definido pelo usuário ou coleção de esquema XML na definição de uma coluna calculada, restrição CHECK ou restrição DEFAULT.
** Cada coluna usada no predicado do filtro é rastreada como uma entidade de referência.
Os procedimentos armazenados numerados com um valor inteiro maior que 1 não são rastreados como uma entidade referencial ou referenciada.
Permissões
Requer a permissão VIEW DEFINITION no banco de dados e a permissão SELECT no sys.sql_expression_dependencies para o banco de dados. Por padrão, a permissão SELECT é concedida apenas aos membros da função de banco de dados fixa db_owner. Quando as permissões SELECT e VIEW DEFINITION são concedidas a outro usuário, o beneficiário pode exibir todas as dependências no banco de dados.
Exemplos
Um. Entidades que retornam que são referenciadas por outra entidade
O exemplo a seguir retorna as tabelas e colunas referenciadas no modo de 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. Entidades que retornam que fazem referência a outra entidade
O exemplo a seguir retorna as entidades que fazem referência à 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 bancos de dados. O exemplo primeiro cria o db1
de banco de dados e dois procedimentos armazenados que fazem referência a tabelas nos bancos de dados db2
e db3
. A tabela sys.sql_expression_dependencies
é consultada para relatar as dependências entre bancos de dados entre os procedimentos e as tabelas. Observe que NULL é retornado na coluna referenced_schema_name
para a entidade referenciada t3
porque um nome de esquema não foi especificado para essa entidade 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
Ver também
sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL)