Als u een lijst wilt retourneren van alle niet-vertrouwde CHECK
beperkingen in een SQL Server-database, kunt u de onderstaande T-SQL-code uitvoeren.
Met "niet-vertrouwd" verwijs ik naar die beperkingen die hun is_not_trusted
hebben vlag ingesteld op 1
.
Voorbeeld 1 – Alleen onbetrouwbare CONTROLE-beperkingen retourneren
Deze zoekopdracht retourneert alleen de niet-vertrouwde CHECK
beperkingen in de huidige database.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, definition FROM sys.check_constraints WHERE is_not_trusted = 1;
Resultaat:
+----------------+-----------------+---------------+-------------------------------+ | Table | Constraint | is_disabled | definition | |----------------+-----------------+---------------+-------------------------------| | ConstraintTest | chkPrice | 0 | ([Price]>(0)) | | ConstraintTest | chkValidEndDate | 1 | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | 1 | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+---------------+-------------------------------+
Deze query retourneert de naam van de beperking, de naam van de tabel waarop deze is toegepast en de definitie van de beperking.
Het retourneert ook de is_disabled
kolom. Dit vertelt ons of de beperking momenteel is ingeschakeld of uitgeschakeld. Dit kan belangrijk zijn om te weten, omdat een beperking kan worden ingeschakeld maar tegelijkertijd niet wordt vertrouwd.
Het bevraagt de sys.check_constraints
systeem bekijken. We weten dat het alleen niet-vertrouwde beperkingen retourneert omdat de WHERE
clausule specificeert alleen rijen die de is_not_trusted
. hebben kolom ingesteld op 1
.
Als u alle vertrouwde wilt retourneren CHECK
beperkingen, verander gewoon de 1
naar 0
.
Voorbeeld 2 – Vertrouwensstatus teruggeven
Hier is het weer, maar deze keer verwissel ik de definition
kolom met de is_not_trusted
kolom:
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;
Resultaat:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Het is waarschijnlijk overbodig om de is_not_trusted
. op te nemen kolom, maar het helpt in ieder geval om te herhalen dat een ingeschakelde beperking nog steeds niet kan worden vertrouwd.
Voorbeeld 3 – Alle CHECK-beperkingen retourneren
De volgende zoekopdracht retourneert alle CHECK
beperkingen voor de huidige database (niet alleen de niet-vertrouwde):
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints;
Resultaat:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Voor een gedetailleerde bespreking (en voorbeelden) van de is_not_trusted
vlag, zie Wat u moet weten over WITH NOCHECK bij het inschakelen van een CHECK-beperking in SQL Server.