sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan deaktiveres en CHECK-begrænsning i SQL Server (T-SQL-eksempler)

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.


  1. Fejl relateret til only_full_group_by ved udførelse af en forespørgsel i MySql

  2. Hvordan opretter man forbindelse til MySQL-databasen?

  3. Hvordan vælger man dato fra kolonnen dato og klokkeslæt?

  4. JSON_INSERT() – Indsæt værdier i et JSON-dokument i MySQL