Scenario:
U werkt als SQL Server-ontwikkelaar, u moet een dbo.Customer-tabel maken die de kolommen Voornaam, Leeftijd en Leeftijdstype moet hebben. U kunt CustomerId als identiteit toevoegen. U moet een controlebeperking voor kolommen voor leeftijd en leeftijdstype maken met onderstaande logica<65 agetype="Adult" and="" p="">
Als het waar is, laat het invoegen of bijwerken van de record anders mislukken vanwege Check Constraint.
65>
<65 agetype="Adult" and="" p="">Oplossing:65>
<65 agetype="Adult" and="" p="">Het onderstaande script kan worden gebruikt om Check Constraint toe te voegen aan meerdere kolommen volgens onze vereisten.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' ) ) )
Laten we een paar records invoegen en proberen te zien of Check Constraint werkt zoals verwacht.
--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 rij(en) beïnvloed)
Msg 547, Level 16, State 0, Line 25
De INSERT-instructie was in strijd met de CHECK-beperking "dbo_Customer_AgeAndAgeType". Het conflict deed zich voor in de database "YourDatabaseName", tabel "dbo.Customer".
De instructie is beëindigd.
(1 rij(en) getroffen)
Msg 547, Level 16, staat 0, regel 33
De INSERT-instructie was in strijd met de CHECK-beperking "dbo_Customer_AgeAndAgeType". Het conflict deed zich voor in de database "YourDatabaseName", tabel "dbo.Customer".
De instructie is beëindigd.
Msg 547, Level 16, State 0, Line 37
De INSERT-instructie was in strijd met de CHECK-beperking "dbo_Customer_AgeAndAgeType". Het conflict deed zich voor in de database "YourDatabaseName", tabel "dbo.Customer".
De instructie is beëindigd.
(1 rij(en) getroffen)
Laten we de gegevens in de tabel controleren met behulp van de selectiequery. Zoals hieronder te zien is, worden de enige records ingevoegd die de Check Constraint hebben doorstaan. De rest van de records kan niet worden ingevoegd.
Controlebeperking maken voor meerdere kolommen in SQL Server-tabel |
Laten we proberen de records bij te werken en kijken of Check Constraint werkt zoals verwacht.
update dbo.Customer set Age=30 where Customerid=1
Het is mislukt met onderstaande fout omdat we AgeType='Child' niet kunnen hebben volgens onze Check Constraint-logica.
Msg 547, Level 16, State 0, Regel 18
De UPDATE-instructie was in strijd met de CHECK-beperking "dbo_Customer_AgeAndAgeType". Het conflict deed zich voor in de database "YourDatabaseName", tabel "dbo.Customer".
De instructie is beëindigd.
Videodemo:Check Constraint maken op Meerdere kolommen in SQL Server