Cenário:
Você está trabalhando como desenvolvedor do SQL Server, você precisa criar a tabela dbo.Customer que deve ter as colunas First Name, Age e Age Type. Você pode adicionar CustomerId como Identity. Você precisa criar a restrição de verificação nas colunas de idade e tipo de idade com a lógica abaixo<65 agetype="Adult" and="" p="">
Se true, deixe o registro inserir ou atualizar, caso contrário, falhe devido a Check Constraint.
65>
<65 agetype="Adult" and="" p="">Solução:65>
<65 agetype="Adult" and="" p="">O script abaixo pode ser usado para adicionar Check Constraint em várias colunas de acordo com nossos requisitos.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' ) ) )
Vamos inserir alguns registros e tentar ver se Check Constraint está funcionando como esperado.
--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 linha(s) afetadas)
Mensagem 547, Nível 16, Estado 0, Linha 25
A instrução INSERT entrou em conflito com a restrição CHECK "dbo_Customer_AgeAndAgeType". O conflito ocorreu no banco de dados "YourDatabaseName", tabela "dbo.Customer".
A instrução foi encerrada.
(1 linha(s) afetadas)
Msg 547, Level 16, Estado 0, Linha 33
A instrução INSERT entrou em conflito com a restrição CHECK "dbo_Customer_AgeAndAgeType". O conflito ocorreu no banco de dados "YourDatabaseName", tabela "dbo.Customer".
A instrução foi encerrada.
Msg 547, Level 16, State 0, Line 37
A instrução INSERT entrou em conflito com a restrição CHECK "dbo_Customer_AgeAndAgeType". O conflito ocorreu no banco de dados "YourDatabaseName", tabela "dbo.Customer".
A instrução foi encerrada.
(1 linha(s) afetadas)
Vamos verificar os dados na tabela usando a consulta de seleção. Como pode ser visto abaixo, são inseridos os únicos registros que passaram na Check Constraint. O restante dos registros não pôde ser inserido.
Como criar restrição de verificação em várias colunas na tabela do SQL Server |
Vamos tentar atualizar os registros e ver se Check Constraint está funcionando conforme o esperado.
update dbo.Customer set Age=30 where Customerid=1
Falha com o erro abaixo, pois não podemos ter Age 30 for AgeType='Child' de acordo com nossa lógica Check Constraint.
Msg 547, Level 16, State 0, Linha 18
A instrução UPDATE entrou em conflito com a restrição CHECK "dbo_Customer_AgeAndAgeType". O conflito ocorreu no banco de dados "YourDatabaseName", tabela "dbo.Customer".
A instrução foi finalizada.
Vídeo Demo :Como criar Check Constraint on Várias colunas no SQL Server