sql >> Database >  >> RDS >> Sqlserver

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

Als u een lijst van alle CHECK . wilt retourneren beperkingen die zijn uitgeschakeld in een SQL Server-database, kunt u de onderstaande T-SQL-code uitvoeren.

Voorbeeld 1 – Alleen retourneren uitgeschakeld CHECK-beperkingen

Deze zoekopdracht retourneert alleen de uitgeschakelde CHECK beperkingen in de huidige database. Het retourneert de naam van de beperking, de naam van de tabel waarop deze is toegepast en de definitie van de beperking.

SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  definition
FROM sys.check_constraints
WHERE is_disabled = 1;

Resultaat:

+----------------+-----------------+-------------------------------+
| Table          | Constraint      | definition                    |
|----------------+-----------------+-------------------------------|
| ConstraintTest | chkValidEndDate | ([EndDate]>=[StartDate])      |
| Occupation     | chkJobTitle     | ([JobTitle]<>'Digital Nomad') |
+----------------+-----------------+-------------------------------+

Dit vraagt ​​de sys.check_constraints systeem bekijken. We weten dat het alleen uitgeschakelde beperkingen retourneert omdat de WHERE clausule specificeert alleen rijen met de is_disabled kolom ingesteld op 1 .

Als u alle ingeschakelde wilt retourneren CHECK beperkingen, verander gewoon de 1 naar 0 .

Voorbeeld 2 – Alle CHECK-beperkingen retourneren

De volgende zoekopdracht retourneert alle CHECK beperkingen voor de huidige database (niet alleen de uitgeschakelde). Deze keer retourneer ik de is_disabled kolom om aan te tonen waar de vorige zoekopdracht zijn waarde vandaan haalde:

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             | 0                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 1             | 1                |
+----------------+-----------------+---------------+------------------+

Ik heb ook de is_not_trusted kolom in deze query. Het is verstandig om rekening te houden met deze waarde, omdat een beperking onbetrouwbaar kan blijven, zelfs nadat deze opnieuw is ingeschakeld. Voor een gedetailleerde bespreking (en voorbeelden) van deze vlag, zie Wat u moet weten over WITH NOCHECK bij het inschakelen van een CHECK-beperking in SQL Server.


  1. Cloud Vendor Deep-Dive:PostgreSQL op Microsoft Azure

  2. Accent- en hoofdletterongevoelige sortering in Oracle met LIKE

  3. Top tien redenen om te migreren van Oracle naar PostgreSQL

  4. Hoe u SQL-resultaten filtert in een heeft-veel-door-relatie