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 | +--------------------------------+---------------+------------------+