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

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

Para devolver una lista de todas las restricciones de clave externa que no son de confianza en una base de datos de SQL Server, puede ejecutar el código T-SQL a continuación.

Una clave externa que no es de confianza es aquella que tiene su is_not_trusted indicador establecido en 1 .

Ejemplo 1:devolver solo restricciones de clave externa que no son de confianza

Esta consulta devuelve solo las restricciones de clave externa que no son de confianza en la base de datos actual. Para este ejemplo, solo devuelvo el nombre de la restricción, su estado de confianza, junto con su estado habilitado/deshabilitado.

SELECT 
  name AS 'Constraint',
  is_not_trusted,
  is_disabled
FROM sys.foreign_keys
WHERE is_not_trusted = 1;

Resultado:

+------------------------+------------------+---------------+
| Constraint             | is_not_trusted   | is_disabled   |
|------------------------+------------------+---------------|
| FK_BandMember_Band     | 1                | 1             |
| FK_BandMember_Musician | 1                | 0             |
+------------------------+------------------+---------------+

Esto consulta el sys.foreign_keys 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 solo de confianza restricciones de clave externa, simplemente cambie el 1 a 0 .

También he incluido el is_disabled flag, porque nos muestra si la restricción está actualmente habilitada o no. Podemos ver que una de las restricciones está habilitada y la otra no.

Esto demuestra el hecho de que se puede desconfiar de una restricción incluso cuando está habilitada. Esto se debe a que, cuando habilita (o crea) una restricción, tiene la opción de hacer que verifique los datos existentes antes de que se habilite. Si elige no verificar los datos existentes, la restricción seguirá siendo no confiable una vez que esté habilitada.

Aquí está de nuevo la misma consulta, pero esta vez incluyo la tabla y la tabla a la que se hace referencia para cada restricción:

SELECT 
  name AS 'Constraint',
  OBJECT_NAME(parent_object_id) AS 'Table',
  OBJECT_NAME(referenced_object_id) AS 'Referenced Table',
  is_disabled,
  is_not_trusted
FROM sys.foreign_keys
WHERE is_not_trusted = 1;

Resultado:

+------------------------+------------+--------------------+---------------+------------------+
| Constraint             | Table      | Referenced Table   | is_disabled   | is_not_trusted   |
|------------------------+------------+--------------------+---------------+------------------|
| FK_BandMember_Band     | BandMember | Band               | 1             | 1                |
| FK_BandMember_Musician | BandMember | Musician           | 0             | 1                |
+------------------------+------------+--------------------+---------------+------------------+

Ejemplo 2:devolver todas las restricciones de clave externa

La siguiente consulta devuelve todos Restricciones de clave externa para la base de datos actual (no solo las que no son de confianza):

SELECT 
  name AS 'Constraint',
  is_not_trusted,
  is_disabled
FROM sys.foreign_keys;

Resultado:

+--------------------------------+------------------+---------------+
| Constraint                     | is_not_trusted   | is_disabled   |
|--------------------------------+------------------+---------------|
| FK_BandMember_Band             | 1                | 1             |
| FK_BandMember_Musician         | 1                | 0             |
| FK_MembershipPeriod_BandMember | 0                | 0             |
+--------------------------------+------------------+---------------+