O que é Check Constraint :
As restrições de verificação limitam os valores aceitos por uma ou mais colunas.Vamos entender Check Constraint com cenário em tempo real.
Você está trabalhando como desenvolvedor do SQL Server, você precisa criar a tabela dbo.Customer que deve ter colunas como FName, LName e Address. Como FName será VARCHAR para que os usuários possam inserir valores de string que podem conter caracteres alfabéticos, numéricos e outros. Você deseja escrever uma restrição de verificação para que FName aceite apenas alfabetos.Solução:
Vamos criar a tabela com Check Constraint usando o script abaixo--Create Table with use YourDatabaseName go Create table dbo.Customer ( FName VARCHAR(100) Not Null, LName VARCHAR(100), StreetAddress VARCHAR(255), Check (FName not like '%[^a-z]%') )
Vamos inserir alguns registros na tabela e ver se nossa Check Constraint está funcionando conforme o esperado. Deve permitir inserir apenas os registros em que FName contém apenas alfabetos.
--insert some sample records insert into dbo.Customer (FName,LName,StreetAddress) Values ('Aamir','Shahzad','xyz address') go insert into dbo.Customer (FName,LName,StreetAddress) Values ('Aamir4','Shahzad','xyz address') go insert into dbo.Customer (FName,LName,StreetAddress) Values ('abc3c','Shahzad','xyz address') go insert into dbo.Customer (FName,LName,StreetAddress) Values ('-tName','Shahzad','xyz address')Quando executei os scripts de inserção acima, abaixo estão as mensagens que recebi do SQL Server.
(1 linha(s) afetada)
Msg 547, Level 16, State 0, Line 18
A instrução INSERT entrou em conflito com a restrição CHECK "CK__Customer__FName__5FB337D6". O conflito ocorreu no banco de dados "YourDatabaseName", tabela "dbo.Customer", coluna 'FName'.
A instrução foi finalizada.
Msg 547, Level 16, State 0, Line 22
A instrução INSERT entrou em conflito com a restrição CHECK "CK__Customer__FName__5FB337D6". O conflito ocorreu no banco de dados "YourDatabaseName", tabela "dbo.Customer", coluna 'FName'.
A instrução foi finalizada.
Msg 547, Level 16, State 0, Line 26
A instrução INSERT entrou em conflito com a restrição CHECK "CK__Customer__FName__5FB337D6". O conflito ocorreu no banco de dados "YourDatabaseName", tabela "dbo.Customer", coluna 'FName'.
A instrução foi finalizada.
Inseriu apenas o primeiro registro que contém todos os alfabetos para FName, o restante dos registros são rejeitados por nossa Check Constraint, pois contêm outros caracteres além do alfabeto.
Vamos verificar os dados na tabela para garantir que apenas um único registro seja inserido.
O que é Check Constraint no SQL Server e como criar Check Constraint no SQL Server |
Demonstração em vídeo:o que é restrição de verificação e como criar restrição de verificação no SQL Server