Scenarie:
Du arbejder som SQL Server-udvikler, du skal oprette dbo. Kundetabel, der skal have kolonnerne Fornavn, Alder og Alderstype. Du kan tilføje CustomerId som identitet. Du skal oprette kontrolbegrænsning på alder og alderstypekolonner med nedenstående logik![](http://www.sqldat.com/article/uploadfiles/202205/2022051109482160.png)
<65 agetype="Voksen" og="" p="">
Hvis sandt, så lad posten indsætte eller opdatering ellers mislykkes på grund af Check Constraint.
65>
<65 agetype="Adult" and="" p="">Løsning:65>
<65 agetype="Adult" and="" p="">Scriptet nedenfor kan bruges til at tilføje Check Constraint på flere kolonner i henhold til vores krav.65>
CREATE TABLE dbo.Customer ( CustomerId INT identity(1, 1) ,NAME VARCHAR(100) ,Age INT ,AgeType VARCHAR(15) ,CONSTRAINT dbo_Customer_AgeAndAgeType CHECK ( ( Age <= 17 AND AgeType = 'Child' ) OR ( Age > 17 AND Age < 65 AND AgeType = 'Adult' ) OR ( Age >= 65 AND AgeType = 'Senior' ) ) )
Lad os indsætte et par poster og prøve at se, om Check Constraint fungerer som forventet.
--Correct values accrording to Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Najaf',13,'Child') go --Wrong values according to Check Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Leena',14,'Adult') go --Correct values accroding to Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Raza',30,'Adult') go --Wrong values according to Check Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Aamir',30,'Senior') go --Wrong values according to Check Constraint insert into dbo.Customer(Name,Age,AgeType) Values('John',65,'Adult') go --Correct values accroding to Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Kris',65,'Senior') go
(1 række(r) påvirket)
Besked 547, niveau 16, tilstand 0, linje 25
INSERT-sætningen var i konflikt med CHECK-begrænsningen "dbo_Customer_AgeAndAgeType". Konflikten opstod i databasen "YourDatabaseName", tabel "dbo.Customer".
Sætningen er blevet afsluttet.
(1 række(r) påvirket)
Msg 547, Level 16, tilstand 0, linje 33
INSERT-sætningen var i konflikt med CHECK-begrænsningen "dbo_Customer_AgeAndAgeType". Konflikten opstod i databasen "YourDatabaseName", tabel "dbo.Customer".
Sætningen er blevet afsluttet.
Besked 547, niveau 16, tilstand 0, linje 37
INSERT-sætningen kom i konflikt med CHECK-begrænsningen "dbo_Customer_AgeAndAgeType". Konflikten opstod i databasen "YourDatabaseName", tabel "dbo.Customer".
Sætningen er blevet afsluttet.
(1 række(r) påvirket)
Lad os tjekke dataene i tabellen ved at bruge valgforespørgsel. Som det kan ses nedenfor, er de eneste poster indsat, som passerede Check Constraint. Resten af posterne kunne ikke indsættes.
![]() |
Sådan opretter du kontrolbegrænsning på flere kolonner i SQL Server-tabel |
Lad os prøve at opdatere posterne og se, om Check Constraint fungerer som forventet.
update dbo.Customer set Age=30 where Customerid=1
Det mislykkedes med nedenstående fejl, da vi ikke kan have Age 30 for AgeType='Child' ifølge vores Check Constraint-logik.
Msg 547, Level 16, State 0, Linje 18
UPDATE-sætningen var i konflikt med CHECK-begrænsningen "dbo_Customer_AgeAndAgeType". Konflikten opstod i databasen "YourDatabaseName", tabel "dbo.Customer".
Erklæringen er blevet afsluttet.
Videodemo :Sådan opretter du Check Constraint på Flere kolonner i SQL Server