Cómo listar mis tablas dependientes, y tablas que dependen de mi

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,

Published 24/12/2007 19:13 por Percy Reyes
Comparte este post:
http://geeks.ms/blogs/ozonicco/archive/2007/12/24/c-243-mo-listar-mis-tablas-dependientes-y-tablas-que-dependen-de-mi.aspx

Comentarios

# re: Cómo listar mis tablas dependientes, y tablas que dependen de mi

Hola Espinete!,

es compatible sólo para SQL Server 2005 y SQL Server 2008, y esto se debe a que la vista sys.objects se incluye a partir de la versión 2005, mientras que sys.sysreferences(SQL Server 2000) se mantiene a la fecha por cuestiones de compatiblidad.

Si deseais convertir este código a su equivalente para SQL Server 2000 te recomiendo que leais esto: msdn2.microsoft.com/.../ms187997.aspx , aunque sólo tendrías que reemplazar sys.objects por sys.sysobjects, y listo!

De igual manera, Felices Fiestas amigo Espinete!!!, un abrazo a la distancias, y gracias por participar  :-)

saludos,

Wednesday, December 26, 2007 3:17 PM por Percy Reyes

# re: Cómo listar mis tablas dependientes, y tablas que dependen de mi

Gracias por el Tip.

Wednesday, March 31, 2010 8:47 AM por Felipe Zapata

# re: Cómo listar mis tablas dependientes, y tablas que dependen de mi

que es una tabla dependiente

Tuesday, May 18, 2010 7:30 PM por daisy casique