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<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