Ciertas veces, para llevar acabo algunas tareas administrativas, tenemos la necesidad de saber cuales son las tablas (u otros objetos: Vistas, UDFs, Stored Procedures) de las cuales depende determinada tabla, o cuales son las tablas (u otros objetos) que dependen de determinada tabla. Existen dos formas, la primera es dando click sobre una tabla cualquiera y luego click derecho para finalmente escoger "'View Dependencies'". En este post voy a explicar como llevar acabo esta tarea mediante T-SQL.

Existen dos vistas del sistema: sys.objects y sys.sysreferences, que podemos consultar para extraer dicha información haciendo una operación JOIN entre estas en base a la dos columnas claves: kfeyid y rkeyid.

  • fkeyid Id. de la tabla que hace referencia
  • rkeyid Id. de la tabla a la que se hace referencia

La vista sys.objects contiene información para cada objeto(excepto triggers DDL y DML) creada dentro de la base de datos definido dentro del esquema del usuario. Usando sys.sysreferences podemos acceder a la metadata de las definiciones de todas las restricciones FOREIGN KEY a las columnas involucradas en una base de datos definida también dentro del esquema del usuario.

Por ejemplo si deseamos ver las tablas dependientes sobre la tabla Products (DB Northwind):

   1: SELECT S.[name] AS 'Tablas Dependientes'
   2: FROM sys.objects S INNER JOIN sys.sysreferences R 
   3:   ON S.OBJECT_ID = R.rkeyid
   4: WHERE S.[type] = 'U' AND
   5:       R.fkeyid = OBJECT_ID('Products')

Si deseamos sabes cuales son las tablas, las cuales dependen de la tabla Products: 

   1: SELECT S.[name] AS 'Tablas que depende de Products'
   2: FROM sys.objects S INNER JOIN sys.sysreferences R 
   3:     ON S.object_id = R.fkeyid
   4: WHERE S.[type] = 'U' 
   5:      AND R.rkeyid = OBJECT_ID('Products')

Este código podriamos generalizarlo dentro de un stored procedure y haciéndolo totalmente dinámico no sólo para consultar información acerca de tablas sino de otros objetos como Vistas, SPs, UDF, etc. Cuestión que usted podrá hacerlo rápidamente ;). En fin, eso fue lo que queria aportar, espero sea de utilidad!,

Feliz Navidad para todos! :D.

Saludos,