Consultar dependencias de un objeto
Señal o problema observado
Antes de modificar una tabla, vista o procedimiento queremos saber qué objetos menciona y qué otros objetos lo mencionan. La duda no es solo “¿existe?”, sino “¿qué podría verse afectado?”.
Qué necesitamos distinguir
Una dependencia tiene dirección. El objeto que contiene la expresión es el referenciante; el objeto nombrado por esa expresión es el referenciado. Revisaremos ambas direcciones por separado.
Consulta
DECLARE @Objeto NVARCHAR(517) = N'dbo.usp_ConsultarPedidos';
DECLARE @IdObjeto INT = OBJECT_ID(@Objeto);
IF @IdObjeto IS NULL
THROW 50000, 'El objeto no existe o no es visible en esta base.', 1;
-- Objetos nombrados por el objeto investigado.
SELECT
d.referenced_server_name AS Servidor,
d.referenced_database_name AS BaseDatos,
d.referenced_schema_name AS Esquema,
d.referenced_entity_name AS ObjetoReferenciado,
COL_NAME(d.referenced_id, d.referenced_minor_id) AS ColumnaReferenciada,
d.is_ambiguous AS ReferenciaAmbigua
FROM sys.sql_expression_dependencies AS d
WHERE d.referencing_id = @IdObjeto
ORDER BY
d.referenced_database_name,
d.referenced_schema_name,
d.referenced_entity_name;
-- Objetos de la base actual que nombran al objeto investigado.
SELECT
s.name AS Esquema,
o.name AS ObjetoReferenciante,
o.type_desc AS Tipo
FROM sys.sql_expression_dependencies AS d
INNER JOIN sys.objects AS o
ON o.object_id = d.referencing_id
INNER JOIN sys.schemas AS s
ON s.schema_id = o.schema_id
WHERE d.referenced_id = @IdObjeto
ORDER BY
o.type_desc,
s.name,
o.name;
Parámetros o permisos
Una expresión persistida es una definición guardada en el catálogo. referenced_id es el identificador interno del objeto referenciado cuando SQL Server puede resolverlo localmente.
Utiliza un nombre de dos partes en @Objeto, como dbo.Pedido o dbo.usp_ConsultarPedidos. OBJECT_ID se resuelve en la base actual y puede devolver NULL si el objeto no existe o no es visible.
La vista registra dependencias por nombre presentes en expresiones SQL persistidas. Para referencias entre bases o servidores, los nombres pueden estar disponibles aunque referenced_id no pueda resolverse como un identificador local.
Cómo leer el resultado
Una referencia ambigua es aquella para la que SQL Server no puede determinar un único objeto válido.
El primer resultado responde “¿qué nombra este objeto?”. Una base de datos, esquema o servidor en NULL normalmente indica que esa parte no se escribió explícitamente o que se trata de una referencia local.
El segundo responde “¿qué objetos locales resueltos nombran este objeto?”. Una vista que aparece aquí merece revisión antes de cambiar una columna que utiliza.
ReferenciaAmbigua = 1 advierte que SQL Server no puede resolver de forma inequívoca la referencia en el momento de almacenar la dependencia. No conviene tratarla como una relación confirmada sin leer la expresión.
Qué conclusión sí permite obtener
Permite documentar dependencias por nombre que SQL Server ha registrado y que son visibles para la cuenta. Es una evidencia útil para estimar el alcance inicial de un cambio.
Qué conclusión todavía no permite obtener
Un job es una tarea programada mediante SQL Server Agent. También puede ejecutar código que no queda representado por estas dependencias.
No es un mapa completo de ejecución. El SQL dinámico, referencias construidas en tiempo de ejecución, código de aplicación, jobs y otros componentes externos pueden quedar fuera. Tampoco demuestra que una ruta se ejecute en producción ni con qué frecuencia.
Que un objeto no aparezca como dependiente no convierte automáticamente un cambio en seguro. Los módulos con referencias diferidas o no resueltas requieren revisión adicional.
Siguiente comprobación razonable
Compara el resultado con la búsqueda textual dentro de objetos SQL. Si investigas tablas, revisa las relaciones declaradas y su estructura de llaves e índices. Para un cambio real, añade pruebas y observación de llamadas desde la aplicación.