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