Wednesday, December 26, 2007 4:28 PM
ozonicco
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,