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

Sådan opretter du en unik begrænsning på flere kolonner i SQL Server - SQL Server / TSQL vejledning del 96

Scenarie:

Du arbejder som SQL Server-udvikler, du bliver bedt om at levere oprette scripts til dbo. Kundetabel med Unique Constraint on First Name og Last Name kolonner.

Løsning:

Som vi ved, at den unikke begrænsning i SQL Server er oprettet på en kolonne eller kolonner for at begrænse kolonnen/erne til kun at acceptere unikke værdier.

Nedenstående script kan bruges til at oprette unikke begrænsninger på flere kolonner i vores tilfælde Fornavn og Efternavn.

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')
 
 Hvis du har bemærket insert-sætningen, har jeg i First Record sat både Null-værdier for FirstName og Last Name. I 2. post brugte jeg værdien 'Aamir' for fornavn og Null for Efternavn. I 3. rekord omvendt af 2. rekord. Herfra forstår vi, at den unikke begrænsning virker på begge kolonneværdier. Så længe den kombinerede værdi fra begge kolonner er unik, vil den lade os indsætte, selv en af ​​dem er null.

Hvis jeg gerne vil indsætte en anden post, hvor jeg har Null som efternavn , det vil lade mig uden problemer, da det er unikt fra eksisterende værdier.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 
 Lad os tjekke posterne i tabellen ved at bruge valgforespørgsel.
Sådan tilføjes unikke begrænsninger på flere kolonner i SQL Server-tabel
Hvis vi forsøger at indsætte en duplikatpost, får vi fejlen nedenfor.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 Meddelelse 2627, niveau 14, tilstand 1, linje 30 Overtrædelse af UNIQUE KEY-begrænsning 'UQ_Dbo_Customer_FName_LName'. Kan ikke indsætte dubletnøgle i objektet 'dbo.Customer'. Dubletnøgleværdien er (Raza, ). Udsagnet er blevet afsluttet.



Videodemo :Opret unik begrænsning på flere kolonner i SQL Server


  1. mysql2 perle kompileret til forkert mysql-klientbibliotek

  2. Indsæt flere poster i oracle

  3. Henvis til et kolonnenavn-alias i WHERE-sætningen

  4. Hvad er ODBC?