Si necesita devolver una lista de todos los CHECK
que no son de confianza restricciones en una base de datos de SQL Server, puede ejecutar el código T-SQL a continuación.
Por "no confiable", me refiero a aquellas restricciones que tienen su is_not_trusted
indicador establecido en 1
.
Ejemplo 1:devolver solo restricciones CHECK que no son de confianza
Esta consulta devuelve solo el CHECK
que no es de confianza restricciones en la base de datos actual.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, definition FROM sys.check_constraints WHERE is_not_trusted = 1;
Resultado:
+----------------+-----------------+---------------+-------------------------------+ | Table | Constraint | is_disabled | definition | |----------------+-----------------+---------------+-------------------------------| | ConstraintTest | chkPrice | 0 | ([Price]>(0)) | | ConstraintTest | chkValidEndDate | 1 | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | 1 | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+---------------+-------------------------------+
Esta consulta devuelve el nombre de la restricción, el nombre de la tabla a la que se aplica y la definición de la restricción.
También devuelve el is_disabled
columna. Esto nos dice si la restricción está actualmente habilitada o deshabilitada. Puede ser importante saber esto, porque una restricción puede estar habilitada pero no confiable al mismo tiempo.
Consulta el sys.check_constraints
vista del sistema. Sabemos que solo devuelve restricciones que no son de confianza porque WHERE
La cláusula especifica solo las filas que tienen el is_not_trusted
columna establecida en 1
.
Si desea devolver todos los de confianza CHECK
restricciones, simplemente cambie el 1
a 0
.
Ejemplo 2:devolución del estado de confianza
Aquí está de nuevo, pero esta vez cambio la definition
columna con is_not_trusted
columna:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints WHERE is_not_trusted = 1;
Resultado:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Probablemente sea superfluo incluir el is_not_trusted
columna, pero al menos ayuda a reiterar el hecho de que aún se puede desconfiar de una restricción habilitada.
Ejemplo 3:devolver todas las restricciones CHECK
La siguiente consulta devuelve todos CHECK
restricciones para la base de datos actual (no solo las que no son de confianza):
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints;
Resultado:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Para una discusión detallada (y ejemplos) de is_not_trusted
marca, consulte Lo que debe saber sobre WITH NOCHECK al habilitar una restricción CHECK en SQL Server.