Dit artikel laat zien hoe u een CHECK
. kunt toevoegen beperking tot een bestaande tabel.
U kunt een beperking aan een bestaande tabel toevoegen met behulp van de ALTER TABLE
statement samen met de ADD CONSTRAINT
argument. Voorbeelden hieronder.
Voorbeeld 1 – Maak de tabel
Laten we eerst een tabel maken waarvoor we de CHECK
. zullen toevoegen beperking.
CREATE TABLE Event ( EventId int IDENTITY(1,1) NOT NULL PRIMARY KEY, EventName varchar(255) NOT NULL, StartDate date NOT NULL, EndDate date NOT NULL, Price smallmoney NOT NULL );
Voorbeeld 2 – Een beperking op kolomniveau toevoegen
Laten we nu een CHECK
. toevoegen beperking tot de
Prijs
kolom.
ALTER TABLE Event ADD CONSTRAINT chkPrice CHECK (Price > 0);
Deze beperking zorgt ervoor dat de prijs altijd hoger is dan nul.
Nu de beperking is toegevoegd, gebeurt het volgende als we proberen ongeldige gegevens in te voegen:
INSERT INTO Event ( EventName, StartDate, EndDate, Price ) VALUES ( 'ICCC 2020', '2020-01-01', '2020-02-02', 0 );
Resultaat:
Msg 547, Level 16, State 0, Line 1 The INSERT statement conflicted with the CHECK constraint "chkPrice". The conflict occurred in database "EMS", table "dbo.Event", column 'Price'.
In dit geval is de CHECK
beperking specificeert dat alle gegevens in de Price
kolom moet groter zijn dan 0. Met andere woorden, de prijs kan niet nul zijn en mag niet negatief zijn.
Dit wordt een beperking op kolomniveau genoemd , omdat het op een enkele kolom is gedefinieerd. Het is van toepassing op gegevens in één kolom.
Voorbeeld 3 – Een beperking op tabelniveau toevoegen
Laten we nu een CHECK
op tabelniveau toevoegen beperking. Hiermee worden gegevens in twee kolommen gecontroleerd.
ALTER TABLE Event ADD CONSTRAINT chkEndDate CHECK (EndDate >= StartDate);
In dit geval voeg ik een beperking toe om ervoor te zorgen dat de einddatum nooit eerder kan zijn dan de startdatum. Dit controleert gegevens over twee kolommen en is daarom een beperking op tabelniveau.
Probeer een ongeldige waarde in te voeren:
INSERT INTO Event ( EventName, StartDate, EndDate, Price ) VALUES ( 'ICCC 2020', '2020-01-01', '1970-02-02', 150.00 );
Resultaat:
Msg 547, Level 16, State 0, Line 1 The INSERT statement conflicted with the CHECK constraint "chkEndDate". The conflict occurred in database "EMS", table "dbo.Event".
Zoals verwacht mislukt de bewerking, omdat mijn einddatum eerder is dan de startdatum.
Merk op dat om deze beperking te testen, ik de prijs moest verhogen tot een geldige waarde om te voorkomen dat de vorige beperking eerst werd geactiveerd (CHECK
beperkingen worden gevalideerd in de volgorde waarin ze zijn gemaakt).
Voorbeeld 4 – Met succes gegevens invoegen die voldoen aan de beperking
Om een rij met succes in te voegen, hoeven we alleen maar te zorgen dat we geldige waarden invoegen.
Voorbeeld:
INSERT INTO Event ( EventName, StartDate, EndDate, Price ) VALUES ( 'ICCC 2020', '2020-01-01', '2020-02-02', 150.00 ); SELECT * FROM Event;
Resultaat:
+-----------+-------------+-------------+------------+----------+ | EventId | EventName | StartDate | EndDate | Price | |-----------+-------------+-------------+------------+----------| | 4 | ICCC 2020 | 2020-01-01 | 2020-02-02 | 150.0000 | +-----------+-------------+-------------+------------+----------+
Merk op dat de
EventId
kolom is al verhoogd naar 4. Dit komt omdat het een IDENTITY
. is kolom. Een belangrijk ding om te onthouden over IDENTITY
kolommen is dat ze zelfs toenemen wanneer een beperking een INSERT
. veroorzaakt operatie mislukt.
Enkele beperkingen van CHECK-beperkingen
Hier zijn een paar beperkingen waarmee u rekening moet houden bij het werken met CHECK
beperkingen:
- De zoekvoorwaarde moet een Booleaanse uitdrukking opleveren en mag niet verwijzen naar een andere tabel.
- De expressie mag geen alias-gegevenstypen bevatten.
CHECK
beperkingen kunnen niet worden gedefinieerd op tekst , ntekst , of afbeelding kolommen.