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

Como criar uma restrição exclusiva em várias colunas no SQL Server - SQL Server / TSQL Tutorial Part 96

Cenário:

Você está trabalhando como SQL Server Developer, você é solicitado a fornecer scripts de criação para a tabela dbo.Customer com Restrição Exclusiva nas colunas Nome e Sobrenome.

Solução:

Como sabemos, a restrição exclusiva no SQL Server é criada em uma coluna ou colunas para restringir a(s) coluna(s) a aceitar apenas valores exclusivos.

O script abaixo pode ser usado para criar uma restrição exclusiva em várias colunas no nosso caso FirstName e LastName.

USE [YourDatabaseName]
GO
CREATE TABLE [dbo].[Customer](
    [FirstName] [varchar](50) NULL,
    [LastName] [varchar](50) NULL,
    [SSN] VARCHAR(11),
    Constraint UQ_Dbo_Customer_FName_LName Unique(FirstName,LastName)
) 

--Let's insert some sample data to test Unique Constraint 
Insert into dbo.Customer(FirstName,LastName,SSN)
Values(Null,Null,'000-00-0000'),
('Aamir',Null,'000-00-0000'),
(Null,'Aamir','000-00-0000')
,('Aamir','Shahzad','000-00-0001')
,('Raza','M','000-00-0002')
 
 Se você notou a instrução insert, em First Record eu coloquei ambos os valores Null para FirstName e Last Name. No 2º registro usei o valor 'Aamir' para o primeiro nome e Null para o sobrenome. No 3º disco vice-versa do 2º disco. A partir daqui, entendemos que a restrição exclusiva está funcionando em ambos os valores da coluna. Desde que o valor combinado de ambas as colunas seja único, ele nos permitirá inserir mesmo que uma delas seja nula.

Se eu gostaria de inserir outro registro no qual eu tenha Nulo para o sobrenome , ele me deixará sem nenhum problema, pois é exclusivo dos valores existentes.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 
 Vamos verificar os registros na tabela usando a consulta de seleção.
Como adicionar restrição exclusiva em várias colunas na tabela do SQL Server
Se tentarmos inserir registros duplicados, obteremos o erro abaixo.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 Msg 2627, Level 14, State 1, Line 30Violation of UNIQUE KEY constraint 'UQ_Dbo_Customer_FName_LName'. Não é possível inserir a chave duplicada no objeto 'dbo.Customer'. O valor da chave duplicada é (Raza, ). A instrução foi encerrada.



Demonstração em vídeo:criar restrição exclusiva em várias colunas no SQL Server