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

Cómo deshabilitar una restricción CHECK en SQL Server (ejemplos de T-SQL)

Cuando intenta ingresar datos en una tabla que tiene un CHECK totalmente habilitado restricción, solo tendrá éxito si los datos no violan esa restricción. Si intenta ingresar datos no válidos, la operación fallará con un error.

Pero, ¿qué pasa si te encuentras en una situación en la que realmente debes insertar datos que violarán el CHECK ¿restricción? Tal vez la restricción ya no se aplique, o quizás tenga una excepción en la que una fila puede omitir la restricción. De cualquier manera, no podrá ingresar nada fuera de las reglas de la restricción.

Si te encuentras en esta situación, siempre puedes desactivar la restricción. He aquí cómo hacerlo usando Transact-SQL.

Ejemplo 1:deshabilitar la restricción CHECK

Para deshabilitar un CHECK restricción, use el NOCHECK argumento dentro de una ALTER TABLE declaración.

Así:

ALTER TABLE Occupation  
NOCHECK CONSTRAINT chkJobTitle; 

Este código deshabilita una restricción llamada chkJobTitle .

Ejemplo 2:revisar la restricción CHECK

Podemos consultar el sys.check_constraints vista del sistema para verificar que nuestra restricción ha sido deshabilitada:

SELECT 
  name,
  is_disabled,
  is_not_trusted,
  definition
FROM sys.check_constraints;

Resultado:

+-----------------+---------------+------------------+----------------------------------------+
| name            | is_disabled   | is_not_trusted   | definition                             |
|-----------------+---------------+------------------+----------------------------------------|
| chkPrice        | 0             | 0                | ([Price]>(0))                          |
| chkValidEndDate | 0             | 0                | ([EndDate]>=[StartDate])               |
| chkTeamSize     | 0             | 0                | ([TeamSize]>=(5) AND [TeamSize]<=(20)) |
| chkJobTitle     | 1             | 1                | ([JobTitle]<>'Digital Nomad')          |
+-----------------+---------------+------------------+----------------------------------------+

En este caso seleccioné todo CHECK restricciones de la base de datos actual.

Podemos ver que este es el único que está deshabilitado (porque es is_disabled la columna se establece en 1 ).

Puede notar que is_not_trusted la columna también se establece en 1 . Esto indica que el CHECK el sistema no ha verificado la restricción para todas las filas.

En otras palabras, ya no podemos asumir que la restricción ha verificado todos los datos. El hecho de que la restricción esté deshabilitada significa que los datos ahora pueden ingresar a la base de datos sin que la restricción los verifique. Por lo tanto, existe la posibilidad de que haya datos no válidos en la base de datos.

Si alguna vez necesita volver a habilitar el CHECK restricción, tendrá la oportunidad de restaurar la confianza de la restricción (mediante el WITH CHECK opción). Esto verificará todas las filas existentes antes de habilitar la restricción.

También tendrá la opción de no verificar los datos existentes, pero esto solo debe hacerse en casos excepcionales.

Consulte Lo que debe saber acerca de WITH NOCHECK al habilitar una restricción CHECK en SQL Server para ver una demostración de cómo se ve afectada la confianza, según cómo vuelva a habilitar la restricción.