sábado, 2 de junio de 2012

EXTRAER LAS DEPENDENCIAS DE UNA O MÁS TABLAS SQLServer por Angel Horberg

Bueno antes que nada como se que mi gran amigo Raciel Moreno es Netcero y SQLsero y como no me va adar tiempo de registrarme para publicar (Si lo considera importante lo publicará) aporto algo relacionado a EXTRAER LAS DEPENDENCIAS DE UNA O MÁS TABLAS SQLServer desde código, el ejemplo que expongo extraigo las dependencias de varias tablas (No es necesario indicar es muy obvio el código), una vez extraiudas las dependencias las meto en un CURSOR itero este y elimino el contendio de estas dependencias, al final ELIMINO el contendio de las tablas principales de las cuales extraje las dependencias, eh acá el codigo del PROCEDIMEINTO ALMACENADO:

CREATE PROCEDURE dbo.DeleteDependenciasEmpleados
AS
BEGIN
DECLARE @nombreTabla varchar(255)
DECLARE @query VARCHAR(500)

DECLARE cursosrEmpleados CURSOR FOR

SELECT FK_Table = FK.TABLE_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (SELECT TC.TABLE_NAME, CU.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON TC.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
WHERE PK.TABLE_NAME = 'Empleados'
OR PK.TABLE_NAME = 'HNSS'
OR PK.TABLE_NAME = 'HNum_ISSSTE'
OR PK.TABLE_NAME = 'HHcta_FOVISSSTE'
OR PK.TABLE_NAME = 'HFecha_Alta_Gob_Fed'
OR PK.TABLE_NAME = 'HFecha_Alta_SEP'
OR PK.TABLE_NAME = 'HFecha_Alta_Rama'
OR PK.TABLE_NAME = 'HForte'
OR PK.TABLE_NAME = 'HQn_Quinquenio'
OR PK.TABLE_NAME = 'HAn_Quinquenio'
OR PK.TABLE_NAME = 'RGrado_Academico'
ORDER BY 1

-- Apertura del cursor
OPEN cursosrEmpleados
-- Lectura de la primera fila del cursor
FETCH cursosrEmpleados INTO @nombreTabla

WHILE (@@FETCH_STATUS = 0 )
BEGIN
PRINT @nombreTabla
EXECUTE ('DELETE FROM '+ @nombreTabla)
-- Lectura de la siguiente fila del cursor
FETCH cursosrEmpleados INTO @nombreTabla
END

--Elimino a mano todas las tablas qu een teoria son las del Layout
PRINT 'Empleados'
EXECUTE ('DELETE FROM Empleados')
PRINT 'HNSS'
EXECUTE ('DELETE FROM HNSS')
PRINT 'HNum_ISSSTE'
EXECUTE ('DELETE FROM HNum_ISSSTE')
PRINT 'HHcta_FOVISSSTE'
EXECUTE ('DELETE FROM HHcta_FOVISSSTE')
PRINT 'HFecha_Alta_Gob_Fed'
EXECUTE ('DELETE FROM HFecha_Alta_Gob_Fed')
PRINT 'HFecha_Alta_SEP'
EXECUTE ('DELETE FROM HFecha_Alta_SEP')
PRINT 'HFecha_Alta_Rama'
EXECUTE ('DELETE FROM HFecha_Alta_Rama')
PRINT 'HForte'
EXECUTE ('DELETE FROM HForte')
PRINT 'HQn_Quinquenio'
EXECUTE ('DELETE FROM HQn_Quinquenio')
PRINT 'HAn_Quinquenio'
EXECUTE ('DELETE FROM HAn_Quinquenio')
PRINT 'RGrado_Academico'
EXECUTE ('DELETE FROM RGrado_Academico')

-- Cierre del cursor
CLOSE cursosrEmpleados
-- Liberar los recursos
DEALLOCATE cursosrEmpleados
END

No hay comentarios:

Publicar un comentario

Mapa de visitantes