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.