Puede usar el siguiente código para deshabilitar todos los CHECK
y restricciones de clave externa para la base de datos actual en SQL Server.
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Esto usa el sp_MSforeachtable
no documentado de Microsoft procedimiento almacenado. Este procedimiento le permite realizar tareas en cada tabla de una base de datos. Así que es perfecto para nuestra tarea aquí:deshabilitar todos los CHECK
restricciones dentro de la base de datos actual.
A continuación se muestra un ejemplo en el que hago esto y luego compruebo el resultado.
Ejemplo 1:revisar las restricciones
Primero, echaré un vistazo rápido al CHECK
actual y restricciones de clave externa en la base de datos, para ver si están habilitadas o deshabilitadas.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
Resultado:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 0 | | ConstraintTest | chkValidEndDate | 0 | 0 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
Así que actualmente hay cuatro CHECK
restricciones en la base de datos, para dos tablas diferentes.
Podemos ver que todas las restricciones están habilitadas porque is_disabled se establece en 0 .
Ejemplo 2:deshabilitar las restricciones
Ahora deshabilitaré todas las restricciones:
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Por lo general, es una buena idea asegurarse de que está utilizando la base de datos correcta al hacer cosas como esta. Entonces podríamos agregar al código anterior cambiando explícitamente a la base de datos correcta:
USE Test; EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
En este caso, cambio a una base de datos llamada Test .
Ejemplo 3:comprobar el resultado
Habiendo ejecutado el código anterior, ahora ejecutaré la misma consulta del primer ejemplo para ver el resultado.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
Resultado:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 1 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Por lo tanto, todas las restricciones en la base de datos se han deshabilitado (porque is_disabled la columna se establece en 1 para esas restricciones).
Tenga en cuenta que is_not_trusted la columna también se establece en 1 . Esta es una consideración importante, especialmente si tiene la intención de volver a habilitar cualquiera de sus restricciones deshabilitadas.
Consulte Lo que debe saber sobre WITH NOCHECK al habilitar una restricción CHECK en SQL Server para obtener información sobre cómo restaurar la confianza al volver a habilitar sus restricciones. La información de ese artículo también se aplica a las claves externas.
Deshabilitar las restricciones individualmente
Si solo desea deshabilitar las restricciones una por una, consulte Cómo deshabilitar una restricción CHECK en SQL Server para ver ejemplos.