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.