noviembre 08, 2006

Script para Activar/Desactivar Constraints en SQL Server

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