Når du forsøger at indtaste data i en tabel, der har en fuldt aktiveret CHECK
begrænsning, vil du kun få succes, hvis dataene ikke overtræder denne begrænsning. Hvis du forsøger at indtaste ugyldige data, vil handlingen mislykkes med en fejl.
Men hvad nu hvis du befinder dig i den situation, hvor du virkelig skal indsæt data, der vil overtræde CHECK
begrænsning? Måske gælder begrænsningen ikke længere, eller måske har du en undtagelse, hvor en række har lov til at omgå begrænsningen. Uanset hvad, vil du ikke være i stand til at indtaste noget uden for reglerne for begrænsningen.
Hvis du befinder dig i denne situation, kan du altid deaktivere begrænsningen. Sådan gør du det ved hjælp af Transact-SQL.
Eksempel 1 – Deaktiver CHECK-begrænsningen
For at deaktivere en CHECK
begrænsning, brug NOCHECK
argument i en ALTER TABLE
erklæring.
Sådan:
ALTER TABLE Occupation NOCHECK CONSTRAINT chkJobTitle;
Denne kode deaktiverer en begrænsning kaldet chkJobTitle .
Eksempel 2 – Gennemgå CHECK-begrænsningen
Vi kan forespørge på sys.check_constraints
systemvisning for at bekræfte, at vores begrænsning er blevet deaktiveret:
SELECT name, is_disabled, is_not_trusted, definition FROM sys.check_constraints;
Resultat:
+-----------------+---------------+------------------+----------------------------------------+ | 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') | +-----------------+---------------+------------------+----------------------------------------+
I dette tilfælde valgte jeg alle CHECK
begrænsninger fra den aktuelle database.
Vi kan se, at dette er den eneste, der er deaktiveret (fordi dens is_disabled kolonne er indstillet til 1 ).
Du bemærker måske, at
is_not_trusted
kolonne er også indstillet til
1
. Dette indikerer, at CHECK
begrænsning er ikke blevet bekræftet af systemet for alle rækker.
Med andre ord kan vi ikke længere antage, at begrænsningen har kontrolleret alle data. Det faktum, at begrænsningen er deaktiveret, betyder, at data nu kan komme ind i databasen uden at blive kontrolleret af begrænsningen. Derfor er der mulighed for, at ugyldige data er til stede i databasen.
Hvis du nogensinde har brug for at genaktivere CHECK
begrænsning, vil du have mulighed for at genoprette begrænsningens tillid (ved at bruge WITH CHECK
mulighed). Dette vil kontrollere alle eksisterende rækker, før begrænsningen aktiveres.
Du vil også have mulighed for ikke kontrollere de eksisterende data, men dette bør kun gøres i sjældne tilfælde.
Se, hvad du bør vide om MED NOCHECK, når du aktiverer en CHECK-begrænsning i SQL Server for en demonstration af, hvordan tillid påvirkes, afhængigt af hvordan du genaktiverer begrænsningen.