Scenario:
Stai lavorando come sviluppatore di SQL Server, devi creare una tabella dbo.Customer che dovrebbe avere le colonne Nome, Età e Tipo di età. Puoi aggiungere CustomerId come identità. È necessario creare le colonne Verifica vincolo su età e tipo di età con la logica sottostante
<65 agetype="Adulto" and="" p="">
Se è vero, lascia che il record si inserisca o si aggiorni, altrimenti non riesce a causa del vincolo di controllo.
65>
<65 agetype="Adulto" and="" p="">Soluzione:65>
<65 agetype="Adult" and="" p="">Lo script sottostante può essere utilizzato per aggiungere il vincolo di controllo su più colonne in base ai nostri requisiti.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'
)
)
) Inseriamo alcuni record e proviamo a vedere se Check Constraint funziona come previsto.
--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 riga/i interessata/e)
Msg 547, livello 16, stato 0, riga 25
L'istruzione INSERT era in conflitto con il vincolo CHECK "dbo_Customer_AgeAndAgeType". Il conflitto si è verificato nel database "YourDatabaseName", tabella "dbo.Customer".
L'istruzione è stata terminata.
(1 riga/i interessata/e)
Msg 547, livello 16, stato 0, riga 33
L'istruzione INSERT era in conflitto con il vincolo CHECK "dbo_Customer_AgeAndAgeType". Il conflitto si è verificato nel database "YourDatabaseName", tabella "dbo.Customer".
L'istruzione è stata terminata.
Msg 547, livello 16, stato 0, riga 37
L'istruzione INSERT era in conflitto con il vincolo CHECK "dbo_Customer_AgeAndAgeType". Il conflitto si è verificato nel database "YourDatabaseName", tabella "dbo.Customer".
L'istruzione è stata terminata.
(1 riga/i interessata/e)
Controlliamo i dati nella tabella utilizzando select query. Come si può vedere di seguito vengono inseriti gli unici record che hanno superato il Check Constraint. Impossibile inserire il resto dei record.
![]() |
| Come creare un vincolo di controllo su più colonne nella tabella di SQL Server |
Proviamo ad aggiornare i record e vediamo se Check Constraint funziona come previsto.
update dbo.Customer set Age=30 where Customerid=1
Non è riuscito con il seguente errore poiché non possiamo avere 30 anni per AgeType='Child' secondo la nostra logica di controllo dei vincoli.
Msg 547, livello 16, stato 0, Riga 18
L'istruzione UPDATE era in conflitto con il vincolo CHECK "dbo_Customer_AgeAndAgeType". Il conflitto si è verificato nel database "YourDatabaseName", tabella "dbo.Customer".
L'istruzione è stata terminata.
Video Demo:come creare un vincolo di controllo su Più colonne in SQL Server
