sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man skapar unika begränsningar för flera kolumner i SQL Server - SQL Server / TSQL självstudie del 96

Scenario:

Du arbetar som SQL Server-utvecklare, du ombeds att tillhandahålla skapa skript för dbo.Kundtabell med Unique Constraint on First Name och Efternamn kolumner.

Lösning:

Som vi vet att den unika begränsningen i SQL Server skapas på en kolumn eller kolumner för att begränsa kolumnen/kolumnerna att endast acceptera unika värden.

Skriftet nedan kan användas för att skapa unika begränsningar på flera kolumner i vårt fall FirstName och 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')
 
 Om du har lagt märke till insert-satsen, har jag i First Record lagt både Null-värden för FirstName och Efternamn. I den andra posten använde jag värdet 'Aamir' för förnamn och Null för efternamn. I 3:e rekordet vice versa till 2:a rekordet. Härifrån förstår vi att den unika begränsningen fungerar på båda kolumnvärdena. Så länge det kombinerade värdet från båda kolumnerna är unikt, kommer det att låta oss infoga även en av dem är null.

Om jag skulle vilja infoga en annan post där jag har Null för efternamn , det låter mig utan problem, eftersom det är unikt från befintliga värden.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 
 Låt oss kontrollera posterna i tabellen med hjälp av urvalsfrågan.
Hur man lägger till unika begränsningar på flera kolumner i SQL Server-tabellen
Om vi ​​försöker infoga en dubblettpost kommer vi att få nedanstående fel.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 Medd. 2627, Nivå 14, Tillstånd 1, Rad 30 Brott mot UNIQUE KEY-begränsningen 'UQ_Dbo_Customer_FName_LName'. Kan inte infoga dubblettnyckel i objektet 'dbo.Customer'. Dubblettnyckelvärdet är (Raza, ). Uttrycket har avslutats.



Videodemo :Skapa unika begränsningar på flera kolumner i SQL Server


  1. Ansluter du till MS SQL Server med Windows-autentisering med Python?

  2. Inner join vs Where

  3. Kan ett tabellfält innehålla ett bindestreck?

  4. PostgreSQL:Vilken datatyp ska användas för valuta?