sys.dm_sql_referencing_entities (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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 maestra 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

Se aplica a: SQL Server ( SQL Server 2008 (10.0.x) y versiones posteriores), SQL Database.

Convenciones 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 nvarchar(60).

Tabla devuelta

Nombre de la columna Tipo de datos Descripción
referencing_schema_name sysname Esquema al que pertenece la entidad que hace la referencia. Acepta 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 entidad de 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.

Observaciones

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 que hace la referencia Entidad a la que se hace referencia
Tabla Sí*
Ver
Procedimiento almacenado de Transact-SQL**
procedimiento almacenado CLR No
Función Transact-SQL definida por el usuario
Función CLR definida por el usuario No
Desencadenador CLR (DML y DDL) No No
Desencadenador DML de Transact-SQL No
Desencadenador DDL de nivel de la base de datos de Transact-SQL No
Desencadenador DDL de nivel de servidor de Transact-SQL No
Procedimientos almacenados extendidos No
Cola No
Synonym (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 de Transact-SQL, un tipo definido por el usuario o una colección de esquemas XML en la definición de una columna calculada, restricción CHECK o restricción DEFAULT.

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

Permisos

SQL Server 2008 (10.0.x): SQL Server 2012 (11.x)

  • Requiere el permiso CONTROL en el objeto al que se hace referencia. 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.

  • Requiere el permiso SELECT en sys.dm_sql_referencing_entities. De forma predeterminada, se concede el permiso SELECT a public.

SQL Server 2014 (12.x) y versiones posteriores

  • No requiere permisos en el objeto al que se hace referencia. Se pueden devolver resultados parciales si el usuario tiene el permiso VIEW DEFINITION solo en algunas entidades de referencia.

  • Requiere el permiso VIEW DEFINITION en el objeto si la entidad de referencia es un objeto.

  • Requiere el permiso VIEW DEFINITION en la base de datos si la entidad de referencia es un desencadenador DDL de base de datos.

  • Requiere el permiso VIEW ANY DEFINITION en el servidor si la entidad de referencia es un desencadenador DDL de servidor.

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 AdventureWorks2022;  
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 dbo.Flag tipo también se usa en la definición de varias columnas de la HumanResources.Employee tabla; sin embargo, dado que el tipo no está en la definición de una columna calculada, restricción CHECK o restricción DEFAULT en la tabla, no se devuelve ninguna fila para la HumanResources.Employee tabla.

USE AdventureWorks2022;  
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 row(s) affected)`  

Consulte también

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