Scénář:
Pracujete jako SQL Server Developer, jste požádáni o poskytnutí skriptů pro vytváření pro tabulku dbo.Customer s jedinečným omezením ve sloupcích Jméno a Příjmení.Řešení:
Jak víme, jedinečné omezení v SQL Server je vytvořeno na sloupci nebo sloupcích, aby omezilo sloupec/y na přijímání pouze jedinečných hodnot.Níže uvedený skript lze použít k vytvoření jedinečného omezení pro více sloupců v našem případě Jméno a Příjmení.
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')
Pokud jste si všimli příkazu insert, do First Record jsem vložil obě hodnoty Null pro jméno a příjmení. Ve 2. záznamu jsem použil hodnotu 'Aamir' pro křestní jméno a Null pro příjmení. Ve 3. záznamu naopak ve 2. záznamu. Odtud jsme pochopili, že jedinečné omezení funguje na obou hodnotách sloupců. Pokud je kombinovaná hodnota z obou sloupců jedinečná, umožní nám to vložit i jeden z nich je null.
Pokud bych chtěl vložit další záznam, ve kterém mám jako příjmení Null , to mě bez problému nechá, protože je jedinečný z existujících hodnot.
Insert into dbo.Customer(FirstName,LastName,SSN) Values('Raza',Null,'000-00-0000')
Pojďme zkontrolovat záznamy v tabulce pomocí výběrového dotazu.
Jak přidat jedinečné omezení pro více sloupců v tabulce SQL Server |
Insert into dbo.Customer(FirstName,LastName,SSN) Values('Raza',Null,'000-00-0000')
Zpráva 2627, úroveň 14, stav 1, řádek 30 Porušení omezení UNIQUE KEY 'UQ_Dbo_Customer_FName_LName'. Nelze vložit duplicitní klíč do objektu 'dbo.Customer'. Hodnota duplicitního klíče je (Raza,
Video ukázka:Vytvoření jedinečného omezení pro více sloupců na serveru SQL