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.