Saltarse las constraints en SQL Server

Saltarse las constraints en SQL Server Anonymous (not verified) Tue, 09/08/2009 - 18:13

Tengo que hacer una carga masiva de datos en muchas tablas de SQL Server que tienen definidas bastantes constraints, sobretodo claves foráneas (FK) entre tablas.

He intentado seguir un orden para cargarlas para que no me devuelva errores de restricciones de integridad, pero son tantas que no consigo encontrar el orden correcto.

Estoy pensando ya en eliminar las FK de todas las tablas, pero seguro que hay alguna manera mejor de solucionarlo.

Alguien me puede ayudar?

Las constraints de una tabla de SQL Server se pueden desactivar temporalmente con la opción NOCHECK CONSTRAINT ALL de ALTER TABLE.

El comando quedaría así:

ALTER TABLE tabla NOCHECK CONSTRAINT ALL;

Con esto se desactivan y puedes hacer la carga de datos sin que te molesten las FK

 

Después, para volver a activarlas sólo tienes que hacer este otro ALTER TABLE:

ALTER TABLE tabla WITH CHECK CHECK CONSTRAINT ALL;

Reactiva las constraints chequeando que los datos de las tablas las cumplan

 

Si quieres volver a habilitarlas sin validar los datos que hayas cargado, aunque no es muy recomendable también se puede hacer:

ALTER TABLE tabla  CHECK CONSTRAINT ALL;

 

Espero que te sea de ayuda,

 

¿Y no habrá ningun tipo de problema en cuanto los datos/registros que hayas modificado una vez vuelvas a activar las CONSTRAINTS?

Por ejemplo si yo cambio el valor de un campo, el cual lo esta cogiendo de una primary key de otra tabla, al volver a a activar las CONSTRAINTS, ¿No habrá conflictos?

In reply to by Jaime (not verified)

Justamente al desactivar los constraints pierdes la garantía de que los datos respetan el modelo relacional, y entonces la responsabilidad es tuya con las modificaciones que hagas, que una vez terminadas han de seguir manteniendo la integridad referencial del modelo, o al menos de los constraints que haya definidos.

Es decir, que tendrás conflictos al reactivarlos sólo si no respetas las reglas que definen los constraints.