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.