sys.sql_expression_dependencies (Transact-SQL)
Se aplica a: punto de conexión de SQL Server Azure SQL Instancia administrada
el punto de conexión de SQL Analytics Analytics Platform System (PDW) de SQL Analytics system (PDW)
de SQL Server
en Microsoft Fabric
Warehouse en Microsoft Fabric
Contiene una fila para cada dependencia por nombre en una entidad definida por el usuario en la base de datos actual. Esto incluye dependencias entre funciones escalares definidas por el usuario y otras funciones escalares compiladas de forma nativa y otros módulos de SQL Server. 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 en la definición de una vista se hace referencia a una tabla, la vista, como entidad que hace la referencia, depende de la tabla, la entidad a la que se hace referencia. Si desapareciera la tabla, la vista sería inservible.
Para obtener más información, vea Funciones escalares definidas por el usuario para OLTP en memoria.
Puede utilizar esta vista de catálogo para notificar información de dependencia de las entidades siguientes:
Entidades enlazadas a un esquema.
Entidades no enlazadas a un esquema.
Entidades entre servidores y entre bases de datos. Se notifican los nombres de entidad; en cambio, no se resuelve el identificador de la entidad.
Dependencias de nivel de columna en entidades enlazadas a un esquema. Se pueden devolver las dependencias de nivel de columna de los objetos no enlazados a un esquema mediante sys.dm_sql_referenced_entities.
Desencadenadores DDL de nivel de servidor en el contexto de la base de datos maestra.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
referencing_id | int | Identificador de la entidad que hace la referencia. No admite valores NULL. |
referencing_minor_id | int | Identificador de la columna cuando la entidad de referencia es una columna; en caso contrario, es 0. No admite valores NULL. |
referencing_class | tinyint | Clase de la entidad que hace la referencia. 1 = Objeto o columna 12 = Desencadenador DDL de base de datos 13 = Desencadenador DDL de servidor No admite valores NULL. |
referencing_class_desc | nvarchar(60) | Descripción de la clase de la entidad que hace la referencia. OBJECT_OR_COLUMN DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER No admite valores NULL. |
is_schema_bound_reference | bit | 1 = La entidad a la que se hace referencia está enlazada a un esquema. 0 = La entidad a la que se hace referencia no está enlazada a un esquema. No admite valores NULL. |
referenced_class | tinyint | Clase de la entidad a la que se hace referencia. 1 = Objeto o columna 6 = Tipo 10 = Colección de esquemas XML 21 = Función de partición No admite valores NULL. |
referenced_class_desc | nvarchar(60) | Descripción de la clase de la entidad a la que se hace referencia. OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION No admite valores NULL. |
referenced_server_name | sysname | Nombre del servidor de la entidad a la que se hace referencia. Esta columna se rellena para las dependencias entre servidores especificadas con un nombre de cuatro partes válido. Para más información sobre los nombres con varias partes, consulte Convenciones de sintaxis de Transact-SQL. NULL para las entidades no enlazadas a un esquema a las que se hizo referencia sin especificar un nombre de cuatro partes. NULL para las entidades enlazadas a esquema porque deben estar en la misma base de datos y, por tanto, solo pueden definirse con un nombre de dos partes (schema.object). |
referenced_database_name | sysname | Nombre de la base de datos de la entidad a la que se hace referencia. Esta columna se rellena para las referencias entre bases de datos o entre servidores especificadas con un nombre válido de tres o cuatro partes. NULL para las referencias no enlazadas a esquema especificadas con un nombre de una o dos partes. NULL para las entidades enlazadas a esquema porque deben estar en la misma base de datos y, por tanto, solo pueden definirse con un nombre de dos partes (schema.object). |
referenced_schema_name | sysname | Esquema al que pertenece la entidad a la que se hace referencia. NULL para las referencias no enlazadas a esquema en las que se hacía referencia a la entidad sin especificar el nombre del esquema. Nunca es NULL para las referencias enlazadas a un esquema porque las entidades enlazadas a un esquema deben definirse y hacerse referencia con un nombre de dos partes. |
referenced_entity_name | sysname | Nombre de la entidad a la que se hace referencia. No admite valores NULL. |
referenced_id | int | Identificador de la entidad a la que se hace referencia. El valor de esta columna nunca es NULL para las referencias enlazadas al esquema. El valor de esta columna siempre es NULL para las referencias entre servidores y entre bases de datos. NULL para las referencias dentro de la base de datos si no se puede determinar el identificador. Para las referencias no enlazadas a un esquema, no se puede resolver el identificador en los casos siguientes: La entidad a la que se hace referencia no existe en la base de datos. El esquema de la entidad a la que se hace referencia depende del esquema del autor de la llamada y se resuelve en tiempo de ejecución. En este caso, is_caller_dependent se establece en 1. |
referenced_minor_id | int | Identificador de la columna a la que se hace referencia cuando la entidad que hace la referencia es una columna; en caso contrario, es 0. No admite valores NULL. Una entidad a la que se hace referencia es una columna cuando una columna se identifica mediante un nombre en la entidad de referencia o cuando la entidad primaria se usa en una instrucción SELECT *. |
is_caller_dependent | bit | Indica que el enlace de esquema de la entidad a la que se hace referencia se realiza en tiempo de ejecución; por consiguiente, la resolución del identificador de la entidad depende del esquema del autor de la llamada. Esto se produce cuando la entidad a la que se hace referencia es un procedimiento almacenado, un procedimiento almacenado extendido o una función definida por el usuario no enlazada a un esquema llamada en una instrucción EXECUTE. 1 = la entidad a la que se hace referencia es dependiente del autor de la llamada y se resuelve en tiempo de ejecución. En este caso, referenced_id es NULL. 0 = El identificador de la entidad a la que se hace referencia no es dependiente del autor de la llamada. Es siempre 0 para las referencias enlazadas a esquema y para las referencias entre bases de datos o entre servidores que especifican explícitamente un nombre de esquema. Por ejemplo, una referencia a una entidad con el formato EXEC MyDatabase.MySchema.MyProc no es dependiente del autor de la llamada. Sin embargo, una referencia con el formato EXEC MyDatabase..MyProc es dependiente del autor de la llamada. |
is_ambiguous | bit | Indica que la referencia es ambigua y se puede resolver en tiempo de ejecución en una función definida por el usuario, un tipo definido por el usuario (UDT) o una referencia xquery a una columna de tipo xml. Por ejemplo, suponga que la instrucción SELECT Sales.GetOrder() FROM Sales.MySales está definida en un procedimiento almacenado. Hasta que no se ejecute el procedimiento almacenado, no se sabrá si Sales.GetOrder() es una función definida por el usuario en el esquema Sales o en la columna con nombre Sales de tipo UDT con un método denominado GetOrder() .1 = La referencia es ambigua. 0 = La referencia no es ambigua o la entidad puede enlazarse correctamente cuando se llama a la vista. Siempre es 0 para las referencias enlazadas a un esquema. |
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.
Nota:
Azure Synapse Analytics y Parallel Data Warehouse admiten tablas, vistas, estadísticas filtradas y los tipos de entidad de procedimientos almacenados de Transact-SQL de esta lista. La información de dependencia se crea y mantiene solo para tablas, vistas y estadísticas filtradas.
Tipo de entidad | Entidad que hace la referencia | Entidad a la que se hace referencia |
---|---|---|
Tabla | Sí* | Sí |
Ver | Sí | Sí |
Índice filtrado | Sí** | No |
Estadísticas filtradas | Sí** | No |
Procedimientos almacenados de Transact-SQL*** | Sí | Sí |
procedimiento almacenado CLR | No | Sí |
Función Transact-SQL definida por el usuario | Sí | Sí |
Función CLR definida por el usuario | No | Sí |
Desencadenador CLR (DML y DDL) | No | No |
Desencadenador DML de Transact-SQL | Sí | No |
Desencadenador DDL de nivel de la base de datos de Transact-SQL | Sí | No |
Desencadenador DDL de nivel de servidor de Transact-SQL | Sí | No |
Procedimientos almacenados extendidos | No | Sí |
Cola | No | Sí |
Synonym (Sinónimo) | No | Sí |
Tipo (tipo CLR y alias definido por el usuario) | No | Sí |
Colección de esquemas XML | No | Sí |
Función de partición | No | Sí |
* 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.
** Se realiza el seguimiento de cada una de las columnas usadas en el predicado de filtro como una entidad de referencia.
*** 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
Necesita el permiso VIEW DEFINITION en la base de datos y el permiso SELECT en sys.sql_expression_dependencies para la base de datos. De forma predeterminada, solo se permite el permiso SELECT a los miembros del rol fijo de base de datos db_owner. Si se conceden los permisos SELECT y VIEW DEFINITION a otro usuario, el receptor puede ver todas las dependencias de la base de datos.
Ejemplos
A. Devolver las entidades a las que otra entidad hace referencia
El ejemplo siguiente devuelve las tablas y columnas a las que se hace referencia en la vista Production.vProductAndDescription
. La vista depende de las entidades (tablas y columnas) devueltas en referenced_entity_name
y las columnas 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. Devolver las entidades que hacen referencia a otra entidad
El ejemplo siguiente devuelve las entidades que hacen referencia a la tabla Production.Product
. Las entidades devueltas en la columna referencing_entity_name
dependen de la tabla 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. Devolver las dependencias entre bases de datos
El siguiente ejemplo devuelve todas las dependencias entre bases de datos. El ejemplo crea primero la base de datos db1
y dos procedimientos almacenados que hacen referencia a tablas en las bases de datos db2
y db3
. A continuación, se consulta la tabla sys.sql_expression_dependencies
para crear informes de las dependencias entre bases de datos entre los procedimientos y las tablas. Observe que NULL se devuelve en la columna referenced_schema_name
para la entidad a la que se hace referencia t3
porque no se especificó un nombre de esquema para esa entidad en la definición del procedimiento.
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 también
sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL)