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

Cómo devolver todas las restricciones CHECK que no son de confianza en SQL Server (ejemplo de T-SQL)

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.