Muchas veces es necesario deshabilitar la integridad referencial o ciertos constraints establecidos en una base de datos SQL Server y este script que encontré en "http://www.melkorcete.com/index.php?c=17" es muy útil para llevar acabo esta tarea.
/*
Script para Activar y Desactivar todos los constraints de una
Base de Datos (CK, FK, PK, DK).
Sólo se especiifca 1 para activar o 0 para desactivar a la variable @p_activar
*/
USE Facturacion
DECLARE @p_activar BIT
SET @p_activar = 1 --Para Activar = 1, Desactivar = 0
Declare @v_retorno int
Begin
Set NoCount Off
-- Almacena la Orden
declare @orden varchar(100)
-- Almacena la Tabla
declare @tabla varchar(100)
-- Almacena el numero de Operacion Realizada
declare @contador int
-- Variables para mensaje
declare @no varchar(2)
declare @des varchar(4)
-- Para la construccion de mensajes se da un valor
-- dependiendo del parametro @p_activar
if @p_activar = 1
begin
set @no = null
set @des = 'A'
end
else
begin
set @no = 'NO'
set @des = 'Desa'
end
-- Cursor para recorrer una a una las Constraints
declare CURSORITO cursor for
SELECT 'ALTER TABLE ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + ' ' + IsNull(@no,'') + 'CHECK CONSTRAINT ALL',TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE
OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0
AND TABLE_TYPE = 'BASE TABLE'
-- Inicializacion de Variables
set @orden = ''
set @tabla = ''
set @contador = 0
-- Mensaje de entrada
print ' '
print '####################################################'
if @no = 'NO'
print '### DESACTIVADO DE CONSTRAINTS ###'
else
print '### ACTIVADO DE CONSTRAINTS ###'
print '####################################################'
print '### '
-- Iniciamos el Cursor y lo recorremos
OPEN CURSORITO
fetch next from CURSORITO
into @orden,@tabla
while @@fetch_status = 0
begin
-- Contador ++
set @contador = @contador + 1
-- Ejecutamos la Orden
exec(@orden)
-- Crear mensaje de salida
print '### ' + convert(varchar,@contador) + ' - ' + convert(varchar,@des) + 'ctivado de ' + convert(varchar,@tabla) + ' completado.'
-- Siguiente Vuelta
fetch next from CURSORITO into @orden, @tabla
end
-- cerramos el cursor
close CURSORITO
deallocate CURSORITO
-- Mensaje de Fin
print '### '
print '####################################################'
if @@error = 0
print '### FINALIZADO CORRECTAMENTE ###'
else
print '### FINALIZADO CON ERRORES ###'
print '####################################################'
Select @v_retorno = @@error
End