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
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