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

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

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.