Om du behöver returnera en lista över alla opålitliga CHECK
begränsningar i en SQL Server-databas kan du köra T-SQL-koden nedan.
Med "untrusted" syftar jag på de begränsningar som har sin is_not_trusted
flaggan inställd på 1
.
Exempel 1 – Returnera endast otillförlitliga CHECK-begränsningar
Den här frågan returnerar endast den opålitliga CHECK
begränsningar i den aktuella databasen.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, definition FROM sys.check_constraints WHERE is_not_trusted = 1;
Resultat:
+----------------+-----------------+---------------+-------------------------------+ | Table | Constraint | is_disabled | definition | |----------------+-----------------+---------------+-------------------------------| | ConstraintTest | chkPrice | 0 | ([Price]>(0)) | | ConstraintTest | chkValidEndDate | 1 | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | 1 | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+---------------+-------------------------------+
Den här frågan returnerar begränsningsnamnet, namnet på tabellen som den tillämpas på och begränsningens definition.
Den returnerar också is_disabled
kolumn. Detta talar om för oss om begränsningen för närvarande är aktiverad eller inaktiverad. Detta kan vara viktigt att veta, eftersom en begränsning kan vara aktiverad men samtidigt opålitlig.
Den frågar efter sys.check_constraints
systemvy. Vi vet att det bara returnerar opålitliga begränsningar eftersom WHERE
sats anger endast rader som har is_not_trusted
kolumn inställd på 1
.
Om du vill returnera alla betrodda CHECK
begränsningar, ändra helt enkelt 1
till 0
.
Exempel 2 – Returnera förtroendestatus
Här är den igen, men den här gången byter jag definition
kolumnen med is_not_trusted
kolumn:
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;
Resultat:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Det är förmodligen överflödigt att inkludera is_not_trusted
kolumn, men det hjälper åtminstone att upprepa det faktum att en aktiverad begränsning fortfarande kan vara obetrodd.
Exempel 3 – Returnera alla CHECK-begränsningar
Följande fråga returnerar alla CHECK
begränsningar för den aktuella databasen (inte bara de otillförlitliga):
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints;
Resultat:
+----------------+-----------------+---------------+------------------+ | 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 en detaljerad diskussion (och exempel) av is_not_trusted
flagga, se Vad du bör veta om MED NOCHECK när du aktiverar en CHECK-begränsning i SQL Server.