Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como criar restrição de verificação em várias colunas no SQL Server - Tutorial SQL Server / TSQL Parte 84

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 agetype="Adult" and="" p="">Solução:

<65 agetype="Adult" and="" p="">O script abaixo pode ser usado para adicionar Check Constraint em várias colunas de acordo com nossos requisitos.


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