Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoyer toutes les contraintes désactivées dans SQL Server (exemple T-SQL)

Voici du code T-SQL que vous pouvez utiliser pour obtenir une liste de toutes les contraintes CHECK et de clé étrangère dans une base de données SQL Server.

Dans l'exemple suivant, je fais un UNION sur deux requêtes de base de données. On interroge sys.foreign_keys pour les clés étrangères désactivées, et les autres requêtes sys.check_constraints pour les contraintes CHECK désactivées.

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;

Résultat :

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

Ce sont les résultats que j'obtiens sur l'une de mes bases de données de test dans mon environnement de développement. Cela renvoie toutes les clés étrangères désactivées et les contraintes CHECK dans la base de données actuelle. Pour vérifier une autre base de données, passez simplement à cette base de données et exécutez-la là-bas.

Notez que lorsque vous désactivez une contrainte, le is_not_trusted l'indicateur est défini sur 1 , et la contrainte est considérée comme non fiable. Lorsque vous réactivez la contrainte, vous avez la possibilité de la réinitialiser sur approuvée ou de la laisser non approuvée. Pour plus d'informations sur la restauration de la confiance dans une contrainte, consultez Comment restaurer la confiance dans une contrainte de clé étrangère dans SQL Server et Ce que vous devez savoir sur WITH NOCHECK lors de l'activation d'une contrainte CHECK dans SQL Server.