sys.dm_sql_referencing_entities (Transact-SQL)

Devuelve una fila para cada entidad en la base de datos actual que hace referencia por nombre a otra entidad definida por el usuario. Se crea una dependencia entre dos entidades cuando una entidad, llamada entidad a la que se hace referencia, aparece por nombre en una expresión de SQL persistente de otra entidad, llamada entidad que hace la referencia. Por ejemplo, si un tipo definido por el usuario (UDT) se especifica como la entidad a la que se hace referencia, esta función devuelve cada entidad definida por el usuario que hace referencia a ese tipo por nombre en su definición. La función no devuelve las entidades en otras bases de datos que pueden hacer referencia a la entidad especificada. Se puede ejecutar esta función en el contexto de la base de datos master para devolver un desencadenador DDL de nivel de servidor como una entidad que hace la referencia.

Puede usar esta función de administración dinámica para informar sobre los tipos siguientes de entidades de la base de datos actual que hacen referencia a la entidad especificada:

  • Entidades enlazadas o no a un esquema.

  • Desencadenadores DLL de nivel de base de datos

  • Desencadenadores DDL de nivel de servidor

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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
    Es el nombre de la entidad a la que se hace referencia.

    schema_name se requiere excepto cuando la clase a la que se hace referencia es PARTITION_FUNCTION.

    schema_name.referenced_entity_name es nvarchar(517).

  • <referenced_class> ::= { OBJECT  | TYPE  | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION }
    Es la clase de la entidad a la que se hace referencia. Solo se puede especificar una clase por instrucción.

    <referenced_class> es de tipo nvarchar(60).

Tabla devuelta

Nombre de columna

Tipo de datos

Descripción

referencing_schema_name

sysname

Esquema al que pertenece la entidad que hace la referencia. Admite valores NULL.

NULL para desencadenadores DDL de nivel de base de datos y nivel de servidor.

referencing_entity_name

sysname

Nombre de la entidad que hace la referencia. No admite valores NULL.

referencing_id

int

Identificador de la entidad que hace la referencia. No admite valores NULL.

referencing_class

tinyint

Clase de la entidad que hace la referencia. No admite valores NULL.

1 = Objeto

12 = Desencadenador DLL de nivel de base de datos

13 = Desencadenador DDL de nivel de servidor

referencing_class_desc

nvarchar(60)

Descripción de la clase de la entidad que hace la referencia.

OBJECT

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

is_caller_dependent

bit

Indica que la resolución del identificador de la entidad a la que se hace referencia se realiza en tiempo de ejecución porque depende del esquema del autor de la llamada.

1 = La entidad que hace la referencia tiene el potencial para hacer referencia a la entidad; sin embargo, la resolución del identificador de la entidad depende del autor de la llamada y no se puede determinar. Esto solo se produce para las referencias no enlazadas a un esquema a un procedimiento almacenado, un procedimiento almacenado extendido o una función definida por el usuario llamada en una instrucción EXECUTE.

0 = La entidad a la que se hace referencia no depende del autor de la llamada.

Excepciones

Devuelve un conjunto de resultados vacío si se da alguna de las condiciones siguientes:

  • Se especifica un objeto del sistema.

  • La entidad especificada no existe en la base de datos actual.

  • La entidad especificada no hace referencia a ninguna entidad.

  • Se pasó un parámetro no válido.

Devuelve un error si la entidad especificada a la que se hace referencia es un procedimiento almacenado numerado.

Comentarios

La tabla siguiente enumera los tipos de entidades para las que se crea y mantiene la información de dependencia. La información de dependencia no se crea ni mantiene para reglas, valores predeterminados, tablas temporales, procedimientos almacenados temporales u objetos del sistema.

Tipo de entidad

Entidad de referencia

Entidad a la que se hace referencia

Tabla

Sí*

Vista

Procedimiento almacenado Transact-SQL**

Procedimiento almacenado CLR

No

Función definida por el usuario de Transact-SQL

Función definida por el usuario CLR

No

Desencadenador CLR (DML y DDL)

No

Ninguno

Desencadenador DML de Transact-SQL

No

Desencadenador DLL de nivel de base de datos de Transact-SQL

No

Desencadenador DDL de servidor Transact-SQL

No

Procedimientos almacenados extendidos

No

Cola

No

Sinónimo

No

Tipo (tipo CLR y alias definido por el usuario)

No

Colección de esquemas XML

No

Función de partición

No

* Se realiza el seguimiento de una tabla como una entidad de referencia solo si hace referencia a un módulo Transact-SQL, un tipo definido por el usuario o una colección de esquemas XML en la definición de una columna calculada, una restricción CHECK o una restricción DEFAULT.

** No se realiza un seguimiento de los procedimientos almacenados numerados con un valor entero mayor que 1 como una entidad de referencia ni como una entidad a la que se hace referencia.

Para obtener más información, vea Descripción de las dependencias SQL.

Permisos

Requiere el permiso CONTROL en la entidad a la que se hace referencia y el permiso SELECT en sys.dm_sql_referencing_entities. Cuando la entidad a la que se hace referencia es una función de partición, se requiere el permiso CONTROL en la base de datos. De forma predeterminada, se concede el permiso SELECT a public.

Ejemplos

A. Devolver las entidades que hacen referencia a una entidad determinada

El ejemplo siguiente devuelve las entidades en la base de datos actual que hacen referencia a la tabla 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. Devolver las entidades que hacen referencia a un tipo determinado

El ejemplo siguiente devuelve las entidades que hacen referencia al tipo de alias dbo.Flag. El conjunto de resultados muestra que dos procedimientos almacenados utilizan este tipo. El tipo dbo.Flag también se utiliza en la definición de varias columnas en la tabla HumanResources.Employee; sin embargo, ya que el tipo no está en la definición de una columna calculada, restricción CHECK o restricción DEFAULT de la tabla, no se devolverá ninguna fila para la tabla 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

El conjunto de resultados es el siguiente.

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 filas afectadas)