sql >> Database >  >> RDS >> Sqlserver

Een CHECK-beperking toevoegen aan een bestaande tabel in SQL Server (T-SQL)

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.

  1. MariaDB JSON_QUERY() uitgelegd

  2. Inleiding tot speciale zoekopdrachten

  3. 50 Shades of NULL – De verschillende betekenissen van NULL in SQL

  4. Referentiewaarde van seriële kolom in een andere kolom tijdens dezelfde INSERT