Jeśli chcesz zwrócić listę wszystkich niezaufanych CHECK
ograniczenia w bazie danych SQL Server, możesz uruchomić poniższy kod T-SQL.
Przez „niezaufany” mam na myśli te ograniczenia, które mają swój is_not_trusted
flaga ustawiona na 1
.
Przykład 1 – Zwróć tylko niezaufane ograniczenia kontrolne
To zapytanie zwraca tylko niezaufany CHECK
ograniczenia w bieżącej bazie danych.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, definition FROM sys.check_constraints WHERE is_not_trusted = 1;
Wynik:
+----------------+-----------------+---------------+-------------------------------+ | Table | Constraint | is_disabled | definition | |----------------+-----------------+---------------+-------------------------------| | ConstraintTest | chkPrice | 0 | ([Price]>(0)) | | ConstraintTest | chkValidEndDate | 1 | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | 1 | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+---------------+-------------------------------+
To zapytanie zwraca nazwę ograniczenia, nazwę tabeli, do której zostało zastosowane, oraz definicję ograniczenia.
Zwraca również is_disabled
kolumna. To mówi nam, czy ograniczenie jest aktualnie włączone, czy wyłączone. Może to być ważne, ponieważ ograniczenie może być włączone, ale jednocześnie niezaufane.
Wysyła zapytanie do sys.check_constraints
widok systemu. Wiemy, że zwraca tylko niezaufane ograniczenia, ponieważ WHERE
klauzula określa tylko wiersze, które mają is_not_trusted
kolumna ustawiona na 1
.
Jeśli chcesz zwrócić wszystkie zaufane CHECK
ograniczenia, po prostu zmień 1
do 0
.
Przykład 2 – Zwróć status zaufania
Tutaj jest znowu, ale tym razem zamieniam definition
kolumna z is_not_trusted
kolumna:
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;
Wynik:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Prawdopodobnie zbyteczne jest uwzględnienie is_not_trusted
kolumna, ale przynajmniej pomaga powtórzyć fakt, że włączone ograniczenie nadal może być niezaufane.
Przykład 3 — Zwróć wszystkie ograniczenia kontrolne
Następujące zapytanie zwraca wszystkie CHECK
ograniczenia dla bieżącej bazy danych (nie tylko niezaufanych):
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints;
Wynik:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Szczegółowe omówienie (i przykłady) is_not_trusted
flagę, zobacz Co powinieneś wiedzieć o funkcji NOCHECK podczas włączania ograniczenia CHECK w SQL Server.