Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So geben Sie alle deaktivierten CHECK-Einschränkungen in SQL Server zurück (T-SQL-Beispiel)

Wenn Sie eine Liste aller CHECK zurückgeben müssen Einschränkungen, die in einer SQL Server-Datenbank deaktiviert wurden, können Sie den folgenden T-SQL-Code ausführen.

Beispiel 1 – Nur deaktivierte CHECK-Einschränkungen zurückgeben

Diese Abfrage gibt nur das deaktivierte CHECK zurück Beschränkungen in der aktuellen Datenbank. Es gibt den Einschränkungsnamen, den Namen der Tabelle, auf die es angewendet wird, und die Definition der Einschränkung zurück.

SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  definition
FROM sys.check_constraints
WHERE is_disabled = 1;

Ergebnis:

+----------------+-----------------+-------------------------------+
| Table          | Constraint      | definition                    |
|----------------+-----------------+-------------------------------|
| ConstraintTest | chkValidEndDate | ([EndDate]>=[StartDate])      |
| Occupation     | chkJobTitle     | ([JobTitle]<>'Digital Nomad') |
+----------------+-----------------+-------------------------------+

Dies fragt die sys.check_constraints ab Systemansicht. Wir wissen, dass es nur deaktivierte Einschränkungen zurückgibt, weil WHERE -Klausel gibt nur Zeilen mit is_disabled an Spalte auf 1 gesetzt .

Wenn Sie alle aktiviert zurückgeben möchten CHECK Einschränkungen ändern Sie einfach die 1 auf 0 .

Beispiel 2 – Alle CHECK-Einschränkungen zurückgeben

Die folgende Abfrage gibt all zurück CHECK Einschränkungen für die aktuelle Datenbank (nicht nur die deaktivierten). Dieses Mal gebe ich den is_disabled zurück Spalte, um zu demonstrieren, woher die vorherige Abfrage ihren Wert hat:

SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled, 
  is_not_trusted
FROM sys.check_constraints;

Ergebnis:

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 0             | 0                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 1             | 1                |
+----------------+-----------------+---------------+------------------+

Ich habe auch den is_not_trusted eingefügt Spalte in dieser Abfrage. Es ist ratsam, diesen Wert im Auge zu behalten, da eine Einschränkung auch nach der erneuten Aktivierung nicht vertrauenswürdig bleiben kann. Eine ausführliche Diskussion (und Beispiele) zu diesem Flag finden Sie unter Was Sie über WITH NOCHECK wissen sollten, wenn Sie eine CHECK-Einschränkung in SQL Server aktivieren.