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

Devolver todas las restricciones deshabilitadas en SQL Server (ejemplo de T-SQL)

Aquí hay un código T-SQL que puede usar para obtener una lista de todas las restricciones de CHECK y clave externa en una base de datos de SQL Server.

En el siguiente ejemplo, hago un UNION en dos consultas de base de datos. Uno consulta sys.foreign_keys para claves foráneas deshabilitadas, y las otras consultas sys.check_constraints para restricciones CHECK deshabilitadas.

SELECT
  SCHEMA_NAME(schema_id) AS [Schema],
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  type_desc,
  is_disabled, 
  is_not_trusted
FROM sys.foreign_keys
WHERE is_disabled = 1
UNION
SELECT 
  SCHEMA_NAME(schema_id),
  OBJECT_NAME(parent_object_id),
  name,
  type_desc,
  is_disabled, 
  is_not_trusted
FROM sys.check_constraints
WHERE is_disabled = 1;

Resultado:

+----------+------------------+--------------------+------------------------+---------------+------------------+
| Schema   | Table            | Constraint         | type_desc              | is_disabled   | is_not_trusted   |
|----------+------------------+--------------------+------------------------+---------------+------------------|
| dbo      | BandMember       | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 1             | 1                |
| dbo      | City             | FK_City_Country    | FOREIGN_KEY_CONSTRAINT | 1             | 1                |
| dbo      | MembershipPeriod | chkValidEndDate    | CHECK_CONSTRAINT       | 1             | 1                |
+----------+------------------+--------------------+------------------------+---------------+------------------+

Estos son los resultados que obtengo en una de mis bases de datos de prueba en mi entorno de desarrollo. Esto devuelve todas las claves foráneas deshabilitadas y las restricciones CHECK en la base de datos actual. Para verificar otra base de datos, simplemente cambie a esa base de datos y ejecútela allí.

Tenga en cuenta que cuando deshabilita una restricción, el is_not_trusted la bandera está establecida en 1 y la restricción se considera que no es de confianza. Cuando vuelve a habilitar la restricción, tiene la opción de restablecerla a confiable o dejarla como no confiable. Para obtener más información sobre cómo restaurar la confianza en una restricción, consulte Cómo restaurar la confianza en una restricción de clave externa en SQL Server y lo que debe saber sobre WITH NOCHECK al habilitar una restricción CHECK en SQL Server.