sys.sql_expression_dependencies (Transact-SQL)
Contém uma linha para cada dependência por nome em uma entidade definida pelo usuário no banco de dados atual. A dependência entre duas entidades é criada quando uma entidade, denominada entidade referenciada, aparece por 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.
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, consulte convenções de sintaxe Transact-SQL (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. Sempre NULL para referências entre servidores e 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:
Jamais NULL para referências associadas a esquema. |
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 tempo de execução; 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 tempo de execução. 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.
Tipo de entidade |
Entidade de referência |
Entidade referenciada |
---|---|---|
Tabela |
Sim* |
Sim |
Exibição |
Sim |
Sim |
Índice filtrado |
Sim** |
Não |
Estatísticas filtradas |
Sim** |
Não |
Procedimento armazenado Transact-SQL*** |
Sim |
Sim |
Procedimento armazenado CLR |
Não |
Sim |
Função Transact-SQL definida pelo usuário |
Sim |
Sim |
Função CLR definida pelo usuário |
Não |
Sim |
Gatilho CLR (DML e DDL) |
Não |
Não |
Gatilho DML Transact-SQL |
Sim |
Não |
Gatilho DDL no nível do banco de dados Transact-SQL |
Sim |
Não |
Gatilho DDL no nível do servidor Transact-SQL |
Sim |
Não |
Procedimentos armazenados estendidos |
Não |
Sim |
Fila |
Não |
Sim |
Sinônimo |
Não |
Sim |
Tipo (alias e tipo de dados CLR definido pelo usuário) |
Não |
Sim |
Coleção de esquemas XML |
Não |
Sim |
Função de partição |
Não |
Sim |
* 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.
Para obter mais informações, consulte Compreendendo dependências do SQL.
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 AdventureWorks2008R2;
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_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 AdventureWorks2008R2;
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. 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