sql >> Database >  >> RDS >> Sqlserver

Alle niet-vertrouwde CHECK-beperkingen in SQL Server retourneren (T-SQL-voorbeeld)

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.


  1. De provider is niet compatibel met de versie van Oracle-clientfout bij gebruik van Oracle.DataClient

  2. hoe gebruikersrechten te verlenen voor een specifiek schema?

  3. Een taakstap toevoegen aan een bestaande SQL Server Agent-taak (T-SQL)

  4. Dynamische SQL (EXECUTE) als voorwaarde voor IF-statement