sql >> Database >  >> RDS >> Sqlserver

Een CHECK-beperking in SQL Server uitschakelen (T-SQL-voorbeelden)

Wanneer u probeert gegevens in te voeren in een tabel met een volledig ingeschakelde CHECK beperking, zult u alleen succesvol zijn als de gegevens die beperking niet schenden. Als u probeert ongeldige gegevens in te voeren, mislukt de bewerking met een fout.

Maar wat als u zich in de situatie bevindt waarin u echt moet gegevens invoegen die de CHECK . schenden beperking? Misschien is de beperking niet langer van toepassing, of misschien heb je een uitzondering waarbij één rij de beperking mag omzeilen. Hoe dan ook, je kunt niets invoeren buiten de regels van de beperking.

Als u zich in deze situatie bevindt, kunt u de beperking altijd uitschakelen. Hier leest u hoe u dat doet met Transact-SQL.

Voorbeeld 1 – Schakel de beperking CHECK uit

Een CHECK uitschakelen beperking, gebruik de NOCHECK argument binnen een ALTER TABLE verklaring.

Zoals dit:

ALTER TABLE Occupation  
NOCHECK CONSTRAINT chkJobTitle; 

Deze code schakelt een beperking uit met de naam chkJobTitle .

Voorbeeld 2 – Bekijk de CHECK-beperking

We kunnen de sys.check_constraints . opvragen systeemweergave om te controleren of onze beperking is uitgeschakeld:

SELECT 
  name,
  is_disabled,
  is_not_trusted,
  definition
FROM sys.check_constraints;

Resultaat:

+-----------------+---------------+------------------+----------------------------------------+
| name            | is_disabled   | is_not_trusted   | definition                             |
|-----------------+---------------+------------------+----------------------------------------|
| chkPrice        | 0             | 0                | ([Price]>(0))                          |
| chkValidEndDate | 0             | 0                | ([EndDate]>=[StartDate])               |
| chkTeamSize     | 0             | 0                | ([TeamSize]>=(5) AND [TeamSize]<=(20)) |
| chkJobTitle     | 1             | 1                | ([JobTitle]<>'Digital Nomad')          |
+-----------------+---------------+------------------+----------------------------------------+

In dit geval heb ik alle CHECK . geselecteerd beperkingen van de huidige database.

We kunnen zien dat dit de enige is die is uitgeschakeld (omdat het is_disabled is) kolom is ingesteld op 1 ).

Je merkt misschien dat de is_not_trusted kolom is ook ingesteld op 1 . Dit geeft aan dat de CHECK beperking is niet voor alle rijen geverifieerd door het systeem.

Met andere woorden, we kunnen er niet langer van uitgaan dat de constraint alle gegevens heeft gecontroleerd. Het feit dat de beperking is uitgeschakeld, betekent dat gegevens nu in de database kunnen komen zonder te worden gecontroleerd door de beperking. Daarom bestaat de kans dat er ongeldige gegevens in de database aanwezig zijn.

Als u ooit de CHECK . opnieuw moet inschakelen beperking, krijgt u de mogelijkheid om het vertrouwen van de beperking te herstellen (door gebruik te maken van de WITH CHECK optie). Hiermee worden alle bestaande rijen gecontroleerd voordat de beperking wordt ingeschakeld.

Je hebt ook de optie niet het controleren van de bestaande gegevens, maar dit mag alleen in zeldzame gevallen worden gedaan.

Zie Wat u moet weten over WITH NOCHECK bij het inschakelen van een CHECK-beperking in SQL Server voor een demonstratie van hoe vertrouwen wordt beïnvloed, afhankelijk van hoe u de beperking opnieuw inschakelt.


  1. MySQL TABLE-instructie

  2. Wiskundige functies van SQL Server (volledige lijst)

  3. Een verhaal van twee clusterfactoren

  4. Complete gids om SQL Database Error 5243 op te lossen