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

Cómo devolver todas las restricciones de clave externa deshabilitadas en SQL Server (ejemplo de T-SQL)

Si necesita devolver una lista de todas las restricciones de clave externa que se han deshabilitado en una base de datos de SQL Server, puede ejecutar el código T-SQL a continuación.

Ejemplo 1:solo devolver restricciones de clave externa deshabilitadas

Esta consulta devuelve solo las restricciones de clave externa deshabilitadas en la base de datos actual. Para este ejemplo, solo devuelvo el nombre de la restricción, junto con su estado deshabilitado y confiable.

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

Resultado:

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

Esto consulta el sys.foreign_keys vista del sistema. Sabemos que solo devuelve restricciones deshabilitadas porque WHERE cláusula especifica solo las filas que tienen el is_disabled columna establecida en 1 .

Si desea regresar solo habilitado restricciones de clave externa, simplemente cambie el 1 a 0 .

Tenga en cuenta que is_not_trusted la bandera también se establece en 1 para estas restricciones deshabilitadas. Esto se debe a que el sistema no puede garantizar que la restricción haya verificado todos los datos. Esto tiene sentido, porque deshabilitar una restricción abre la posibilidad de que datos no válidos ingresen a la base de datos sin ser verificados.

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_disabled = 1;

Resultado:

+------------------------+------------+--------------------+---------------+------------------+
| Constraint             | Table      | Referenced Table   | is_disabled   | is_not_trusted   |
|------------------------+------------+--------------------+---------------+------------------|
| FK_BandMember_Band     | BandMember | Band               | 1             | 1                |
| FK_BandMember_Musician | BandMember | Musician           | 1             | 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 deshabilitadas):

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

Resultado:

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