Constraints são utilizadas como um meio de segurança prevenindo a entrada de dados fora de um limite estabelecido pelo DBA.
É possível criar um constraints com dois diferentes níveis:
Coluna: É aplicado somente na coluna e não pode referenciar outra coluna.
Tabela: Pode ser referenciado em qualquer coluna de uma tabela, mais não pode fazer referência a outras tabelas.
Criando um rule para validação de e-mail
create rule EmailValida
as
@value like '%@%.[a-z][a-z][a-z]' or @value like '%@%.[a-z][a-z].[a-z][a-z]';
Criando um tabela para realizar a aplicação da Rule
create table Teste(
nome varchar(30) not null,
email varchar(30) not null
)
Aplicando a rule a coluna email
EXEC sp_bindrule 'EmailValida','Teste.email'
Após aplicar a rule eu tento inserir um valor que não passa na validação da rule “s”.
insert Teste(nome,email) values ('maykon','s')
Gera o seguinte erro:
A column insert or update conflicts with a rule imposed by a previous CREATE RULE statement. The statement was terminated. The conflict occurred in database 'data', table 'dbo.Teste', column 'email'.
Este valor passa na validação
insert Teste(nome,email) values ('maykon','maykon@.com.br')
Adicionado default constraint na coluna cidade
create table Teste2(
nome varchar(30) not null,
email varchar(30) not null,
cidade varchar(60) not null default 'Cidade'
)
Unique Constraints
Com essa funcionalidade da para negar a inserção de valores duplicados em uma coluna.
create table Teste3(
nome varchar(30) not null unique nonclustered,
email varchar(30) not null,
cidade varchar(60) not null default 'Cidade'
)
Inserindo os dados
insert Teste3(nome,email,cidade) values ('maykon','maykon@sc.br',default)
Se eu tentar executar novamente a query vai gerar o seguinte erro.
Violation of UNIQUE KEY constraint 'UQ__Teste3__014935CB'. Cannot insert duplicate key in object 'dbo.Teste3'.
Criação de uma chave primária.
create table Teste4(
id int primary key,
nome varchar(30) not null
)
É possível criar um constraints com dois diferentes níveis:
Coluna: É aplicado somente na coluna e não pode referenciar outra coluna.
Tabela: Pode ser referenciado em qualquer coluna de uma tabela, mais não pode fazer referência a outras tabelas.
Criando um rule para validação de e-mail
create rule EmailValida
as
@value like '%@%.[a-z][a-z][a-z]' or @value like '%@%.[a-z][a-z].[a-z][a-z]';
Criando um tabela para realizar a aplicação da Rule
create table Teste(
nome varchar(30) not null,
email varchar(30) not null
)
Aplicando a rule a coluna email
EXEC sp_bindrule 'EmailValida','Teste.email'
Após aplicar a rule eu tento inserir um valor que não passa na validação da rule “s”.
insert Teste(nome,email) values ('maykon','s')
Gera o seguinte erro:
A column insert or update conflicts with a rule imposed by a previous CREATE RULE statement. The statement was terminated. The conflict occurred in database 'data', table 'dbo.Teste', column 'email'.
Este valor passa na validação
insert Teste(nome,email) values ('maykon','maykon@.com.br')
Adicionado default constraint na coluna cidade
create table Teste2(
nome varchar(30) not null,
email varchar(30) not null,
cidade varchar(60) not null default 'Cidade'
)
Unique Constraints
Com essa funcionalidade da para negar a inserção de valores duplicados em uma coluna.
create table Teste3(
nome varchar(30) not null unique nonclustered,
email varchar(30) not null,
cidade varchar(60) not null default 'Cidade'
)
Inserindo os dados
insert Teste3(nome,email,cidade) values ('maykon','maykon@sc.br',default)
Se eu tentar executar novamente a query vai gerar o seguinte erro.
Violation of UNIQUE KEY constraint 'UQ__Teste3__014935CB'. Cannot insert duplicate key in object 'dbo.Teste3'.
Criação de uma chave primária.
create table Teste4(
id int primary key,
nome varchar(30) not null
)