Amigos,
Como uds saben ante operaciones tales como el borrado de datos de tablas referenciadas por FK, es necesario desahbilitar los mismos, para luego, una vez borrada la data, volver a habilitarlos.
Les dejo aquí un script que permite automatizar la tarea, espero que les sea de utilidad.
--------------------------------------------------------------------------------------------------------------------
-- Detalle: Este script permite deshabilitar/habilitar todos los FK de de una BD --
-- Gustavo Herrera para Sql Server Tips - http://gherrerasqlserver.blogspot.com/ --
---------------------------------------------------------------------------------------------------------------------
DECLARE
@TableName varchar(255),
@sql varchar(4000)
DECLARE cTable CURSOR FORWARD_ONLY FOR
-- Obtengo los nombres de las tablas de las bases de datos.
SELECT name
FROM sys.objects
WHERE
type = 'U'
OPEN cTable
FETCH NEXT FROM cTable
INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
-- Para deshabilitar
SET @sql = 'alter table [' + @TableName + '] nocheck constraint all'
-- Para volver a habilitar
SET @sql = 'alter table ' + @TableName + ' check constraint all '
EXEC (@sql)
FETCH NEXT FROM cTable INTO @TableName
END
CLOSE cTable
DEALLOCATE cTable
Mi nombre es Gustavo Herrera. Me desempeño profesionalmente como DBA especializado en Microsoft Sql Server, formo parte activamente de la Comunidad Sql Server de Argentina (comunidad oficial de Microsoft). La idea de este blog es generar un vínculo más de intercambio con uds., mis queridos colegas. Espero que se sientan a gusto, pasen, vean, opinen, comenten, critiquen, aporten.. este blog lo hacemos entre todos.
Buscar este blog
Suscribirse a:
Enviar comentarios (Atom)
gracias, buen aporte
ResponderEliminarComo ejecuto el script ?
ResponderEliminarLo hago de la siguiente forma y sigue la restricción FOREIGN KEY. Gracias ...
DECLARE
@TableName varchar(255),
@sql varchar(4000)
DECLARE cTable CURSOR FORWARD_ONLY FOR
-- Obtengo los nombres de las tablas de las bases de datos.
SELECT name
FROM sys.objects
WHERE
type = 'U'
OPEN cTable
FETCH NEXT FROM cTable
INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
-- Para deshabilitar
SET @sql = 'alter table [' + @TableName + '] nocheck constraint all'
TRUNCATE TABLE VR_LegajoUltimoTramo;
TRUNCATE TABLE VR_LOTE_CN_GENERADO;
TRUNCATE TABLE VR_LOTE_CN_RECIBIDO;
TRUNCATE TABLE VR_ReasignacionAsiento;
TRUNCATE TABLE VR_ReasignacionAsientoAuxiliar;
TRUNCATE TABLE VR_ReasignacionAsientoSubauxiliar;
-- Para volver a habilitar
SET @sql = 'alter table ' + @TableName + ' check constraint all '
EXEC (@sql)
FETCH NEXT FROM cTable INTO @TableName
END
CLOSE cTable
DEALLOCATE cTable
Muchas gracias sirvio u monton
ResponderEliminar