sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo deshabilitar todas las restricciones de CHECK y clave externa para una tabla en SQL Server (ejemplos de T-SQL)

Puede usar el siguiente código para deshabilitar todos los CHECK y restricciones de clave externa para una tabla específica en SQL Server.

Simplemente reemplace TableName con el nombre de la tabla aplicable.

ALTER TABLE TableName NOCHECK CONSTRAINT ALL

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, tres de las cuales son para ConstraintTest mesa.

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 para ConstraintTest tabla:

ALTER TABLE ConstraintTest 
NOCHECK CONSTRAINT ALL;

Ejemplo 3:comprobar el resultado

Ahora ejecuto 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     | 0             | 0                |
+----------------+-----------------+---------------+------------------+

Como era de esperar, las tres restricciones para ConstraintTest han sido deshabilitadas (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 no desea deshabilitar todas las restricciones en la tabla, puede deshabilitarlas individualmente. Consulte Cómo deshabilitar una restricción CHECK en SQL Server y Cómo deshabilitar una clave externa en SQL Server.

Vuelva a habilitar las restricciones

Si necesita volver a habilitar todas las restricciones para una tabla, consulte Cómo habilitar ALL CHECK y restricciones de clave externa para una tabla.

Si necesita volver a habilitarlos individualmente, consulte Cómo habilitar una restricción CHECK en SQL Server y Cómo habilitar una clave externa en SQL Server.