sys.dm_sql_referencing_entities (Transact-SQL)

Retorna uma linha para cada entidade do banco de dados atual que faz referência a outra entidade definida pelo usuário por nome. 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, se um UDT (tipo definido pelo usuário) for especificado como entidade referenciada, essa função retornará cada entidade definida pelo usuário que referencia aquele tipo pelo nome em sua definição. A função não retorna entidades em outros bancos de dados que podem fazer referência à entidade especificada. Essa função precisa ser executada no contexto do banco de dados mestre para retornar um gatilho DDL no nível do servidor como entidade de referência.

Você pode usar essa função de gerenciamento dinâmico para relatar os seguintes tipos de entidades do banco de dados atual que fazem referência à entidade especificada:

  • Entidades associadas a esquema ou entidades não associadas a esquema

  • Gatilhos DDL no nível do banco de dados

  • Gatilhos DDL no nível do servidor

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

sys.dm_sql_referencing_entities (
        ' schema_name.referenced_entity_name ' , ' <referenced_class> ' )

<referenced_class> ::=
{
  OBJECT
  | TYPE
  | XML_SCHEMA_COLLECTION
  | PARTITION_FUNCTION
}

Argumentos

  • schema_name.referenced_entity_name
    É o nome da entidade referenciada.

    schema_name é necessário, exceto quando a classe referenciada é a PARTITION_FUNCTION.

    schema_name.referenced_entity_name é nvarchar(517).

  • <referenced_class> ::= { OBJECT  | TYPE  | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION }
    É a classe da entidade referenciada. Apenas uma classe pode ser especificada por instrução.

    <referenced_class> é nvarchar(60).

Tabela retornada

Nome da coluna

Tipo de dados

Descrição

referencing_schema_name

sysname

Esquema ao qual a entidade de referência pertence. É anulável.

NULL para nível de banco de dados e gatilhos DDL no nível do servidor.

referencing_entity_name

sysname

Nome da entidade de referência. Não é anulável.

referencing_id

int

ID da entidade de referência. Não é anulável.

referencing_class

tinyint

Classe da entidade de referência. Não é anulável.

1 = Objeto

12 = Gatilho DDL no nível do banco de dados

13 - Gatilho DDL no nível do servidor

referencing_class_desc

nvarchar(60)

Descrição da classe da entidade de referência.

OBJECT

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

is_caller_dependent

bit

Indica que a resolução da ID da entidade referenciada ocorre em tempo de execução por depender do esquema do chamador.

1 = A entidade de referência tem o potencial de fazer referência à entidade. No entanto, a resolução da ID da entidade referenciada depende do chamador e não pode ser determinada. Isso ocorre apenas com relação a referências não associadas a esquema em procedimento armazenado, procedimento armazenado estendido ou função definida pelo usuário chamados em uma instrução EXECUTE.

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

Exceções

Retorna um conjunto de resultados vazio em qualquer uma das seguintes condições:

  • Um objeto de sistema é especificado.

  • A entidade especificada não existe no banco de dados atual.

  • A entidade especificada não faz referência a nenhuma entidade.

  • Um parâmetro inválido é passado.

Retorna um erro quando a entidade referenciada especificada é um procedimento armazenado numerado.

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

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.

** Os procedimentos armazenados numerados com um valor inteiro maior que 1 não são controlados como entidade que faz referência nem como entidade referenciada.

Para obter mais informações, consulte Compreendendo dependências do SQL.

Permissões

Requer a permissão CONTROL da entidade referenciada e a permissão SELECT em sys.dm_sql_referencing_entities. Quando a entidade referenciada é uma função de partição, a permissão CONTROL é exigida no banco de dados. Por padrão, a permissão SELECT é concedida a público.

Exemplos

A. Retornando as entidades que se referem a uma determinada entidade

O exemplo a seguir retorna as entidades do banco de dados atual que fazem referência à tabela especificada.

USE AdventureWorks2008R2;
GO
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('Production.Product', 'OBJECT');
GO

B. Retornando as entidades que se referem a um determinado tipo

O exemplo a seguir retorna as entidades que referenciam o tipo de alias dbo.Flag. O conjunto de resultados mostra que dois procedimentos armazenados usam esse tipo. O tipo dbo.Flag também é usado na definição de várias colunas da tabela HumanResources.Employee. No entanto, como o tipo não consta da definição de uma coluna computada, restrição CHECK nem restrição DEFAULT da tabela, nenhuma linha é retornada para a tabela HumanResources.Employee.

USE AdventureWorks2008R2;
GO
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.Flag', 'TYPE');
GO

Aqui está o conjunto de resultados.

referencing_schema_name referencing_entity_name   referencing_id referencing_class_desc is_caller_dependent

----------------------- -------------------------  ------------- ---------------------- -------------------

HumanResources          uspUpdateEmployeeHireInfo  1803153469    OBJECT_OR_COLUMN       0

HumanResources          uspUpdateEmployeeLogin     1819153526    OBJECT_OR_COLUMN       0

(2 linhas afetadas)