Wenn Sie eine Liste aller nicht vertrauenswürdigen CHECK
zurückgeben müssen Beschränkungen in einer SQL Server-Datenbank können Sie den folgenden T-SQL-Code ausführen.
Mit „nicht vertrauenswürdig“ beziehe ich mich auf die Einschränkungen, die ihren is_not_trusted
haben Flag auf 1
gesetzt .
Beispiel 1 – Nur nicht vertrauenswürdige CHECK-Einschränkungen zurückgeben
Diese Abfrage gibt nur den nicht vertrauenswürdigen CHECK
zurück Beschränkungen in der aktuellen Datenbank.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, definition FROM sys.check_constraints WHERE is_not_trusted = 1;
Ergebnis:
+----------------+-----------------+---------------+-------------------------------+ | Table | Constraint | is_disabled | definition | |----------------+-----------------+---------------+-------------------------------| | ConstraintTest | chkPrice | 0 | ([Price]>(0)) | | ConstraintTest | chkValidEndDate | 1 | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | 1 | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+---------------+-------------------------------+
Diese Abfrage gibt den Einschränkungsnamen, den Namen der Tabelle, auf die sie angewendet wird, und die Definition der Einschränkung zurück.
Es gibt auch is_disabled
zurück Säule. Dies sagt uns, ob die Einschränkung derzeit aktiviert oder deaktiviert ist oder nicht. Dies kann wichtig sein, da eine Einschränkung aktiviert, aber gleichzeitig nicht vertrauenswürdig sein kann.
Es fragt die sys.check_constraints
ab Systemansicht. Wir wissen, dass es nur nicht vertrauenswürdige Einschränkungen zurückgibt, weil WHERE
-Klausel gibt nur Zeilen mit is_not_trusted
an Spalte auf 1
gesetzt .
Wenn Sie alle vertrauenswürdig zurückgeben möchten CHECK
Einschränkungen ändern Sie einfach die 1
auf 0
.
Beispiel 2 – Vertrauensstatus zurückgeben
Hier ist es wieder, aber diesmal vertausche ich die definition
Spalte mit dem is_not_trusted
Spalte:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints WHERE is_not_trusted = 1;
Ergebnis:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Es ist wahrscheinlich überflüssig, den is_not_trusted
einzufügen Spalte, aber zumindest hilft es, die Tatsache zu wiederholen, dass eine aktivierte Einschränkung immer noch nicht vertrauenswürdig sein kann.
Beispiel 3 – Alle CHECK-Einschränkungen zurückgeben
Die folgende Abfrage gibt all zurück CHECK
Einschränkungen für die aktuelle Datenbank (nicht nur die nicht vertrauenswürdigen):
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 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Für eine detaillierte Diskussion (und Beispiele) von is_not_trusted
Flag finden Sie unter Was Sie über WITH NOCHECK wissen sollten, wenn Sie eine CHECK-Einschränkung in SQL Server aktivieren.