Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come creare un vincolo univoco su più colonne in SQL Server - Tutorial SQL Server / TSQL Parte 96

Scenario:

Stai lavorando come sviluppatore SQL Server, ti viene chiesto di fornire script di creazione per dbo.Tabella cliente con vincolo univoco sulle colonne Nome e Cognome.

Soluzione:

Come sappiamo, il vincolo univoco in SQL Server viene creato su una o più colonne per limitare la/e colonna/e ad accettare solo valori univoci.

Lo script seguente può essere utilizzato per creare un vincolo univoco su più colonne nel nostro caso Nome e Cognome.

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 hai notato l'istruzione di inserimento, in First Record ho inserito entrambi i valori Null per FirstName e Last Name. Nel 2° record ho usato il valore 'Aamir' per il nome e Null per il cognome. In 3° record viceversa di 2° record. Da qui ciò che capiamo che il vincolo univoco funziona su entrambi i valori di colonna. Finché il valore combinato di entrambe le colonne è univoco, ci consentirà di inserirne anche uno nullo.

Se desidero inserire un altro record in cui ho Null per cognome , me lo consentirà senza alcun problema, poiché è unico rispetto ai valori esistenti.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 
 Controlliamo i record nella tabella utilizzando select query.
Come aggiungere un vincolo univoco su più colonne nella tabella di SQL Server
Se proviamo a inserire un record duplicato, otterremo il seguente errore.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 Msg 2627, livello 14, stato 1, riga 30 Violazione del vincolo UNIQUE KEY 'UQ_Dbo_Customer_FName_LName'. Impossibile inserire la chiave duplicata nell'oggetto 'dbo.Customer'. Il valore della chiave duplicata è (Raza, ). L'istruzione è stata terminata.



Video demo:crea vincoli univoci su più colonne in SQL Server