O que é restrição exclusiva no SQL Server:
A restrição exclusiva no SQL Server é criada em uma coluna ou colunas para restringir a(s) coluna(s) a aceitar apenas valores exclusivos.Somente um valor nulo único é permitido em uma coluna na qual a restrição exclusiva é criada.
Cenário:
Digamos que você esteja trabalhando como desenvolvedor SQL Server para uma seguradora, você é solicitado a criar uma tabela dbo.Customer que deve ter um SSN de coluna e deve sempre aceitar valores exclusivos.Solução:
Para o cenário acima, podemos usar a restrição exclusiva na coluna SSN. O script abaixo pode ser usado para criar uma restrição exclusiva em uma coluna.USE [YourDatabaseName] GO CREATE TABLE [dbo].[Customer]( [FirstName] [varchar](50) NULL, [LastName] [varchar](50) NULL, [SSN] VARCHAR(11), Unique(SSN) ) --Insert sample records in table Insert into dbo.Customer(FirstName,LastName,SSN) Values('Raza','M',Null) ,('Aamir','Shahzad','000-00-0001') ,('Aamir','Shahzad','000-00-0002')
Verifique os dados na tabela dbo.Customer usando Select query
Como adicionar restrição exclusiva em uma coluna no SQL Server |
Vamos usar as visualizações do sistema para verificar se a restrição exclusiva foi adicionada e qual nome o SQL Server deu a ela.
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'UNIQUE'
Como adicionar restrição exclusiva no SQL Server |
Como podemos ver que o SQL Server deu o nome "UQ__Customer__CA1E8E3C7E8AFCB1" para Unique Constraint. Se quisermos implementar alguma convenção de nomenclatura, deveríamos ter fornecido o nome por nós mesmos.
Se tentarmos inserir o valor que já existe na coluna Restrição Exclusiva, obteremos o erro abaixo.
Insert into dbo.Customer(FirstName,LastName,SSN) Values('Raza','M',Null)
Msg 2627, Level 14, State 1, Line 11
Violação da restrição UNIQUE KEY 'UQ__Customer__CA1E8E3C7E8AFCB1'. Não é possível inserir a chave duplicada no objeto 'dbo.Customer'. O valor da chave duplicada é (
A instrução foi encerrada.
Se você quiser criar a restrição exclusiva com alguma convenção de nomenclatura, podemos usar a sintaxe abaixo.
USE [YourDatabaseName] GO CREATE TABLE [dbo].[Customer]( [FirstName] [varchar](50) NULL, [LastName] [varchar](50) NULL, [SSN] VARCHAR(11), Constraint UQ_Dbo_Customer_SSN Unique(SSN) )
Demonstração em vídeo:o que é restrição exclusiva no SQL Server