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.

Índice del recorrido

Desarrollo y exploración

22 artículos de Desarrollo y exploración
  1. 01Buscar una tabla o vista por nombre
  2. 02Buscar una columna en toda la base
  3. 03Buscar texto dentro de procedimientos, vistas y funciones
  4. 04Consultar dependencias de un objeto
  5. 05Listar relaciones y llaves foráneas
  6. 06Consultar llaves primarias, restricciones únicas e índices
  7. 07Listar columnas con tipo, longitud, nulabilidad y valor predeterminado
  8. 08Encontrar triggers y sus tablas asociadas
  9. 09Encontrar objetos modificados recientemente
  10. 10Obtener conteos aproximados de todas las tablas
  11. 11Medir el espacio utilizado por cada tabla
  12. 12Revisar columnas IDENTITY y su valor actual
  13. 13Detectar registros duplicados por una clave de negocio
  14. 14Detectar registros huérfanos
  15. 15Comparar dos conjuntos de datos
  16. 16Validar conversiones antes de modificar una columna
  17. 17Ejecutar un UPDATE con validación y reversión controlada
  18. 18Ejecutar un DELETE con respaldo lógico y reversión controlada
  19. 19Comparar la estructura de dos bases de datos
  20. 20Describir el resultado de una consulta o procedimiento
  21. 21Encontrar tablas sin llave primaria
  22. 22Buscar un valor en columnas seleccionadas