Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak utworzyć unikalne ograniczenie dla wielu kolumn w SQL Server — samouczek SQL Server / TSQL część 96

Scenariusz:

Pracujesz jako programista SQL Server, zostaniesz poproszony o dostarczenie skryptów tworzenia dla tabeli dbo.Customer z unikalnym ograniczeniem w kolumnach Imię i Nazwisko.

Rozwiązanie:

Jak wiemy, unikalne ograniczenie w SQL Server jest tworzone na kolumnie lub kolumnach, aby ograniczyć kolumnę/kolumny do akceptowania tylko unikalnych wartości.

Poniższy skrypt może być użyty do utworzenia unikalnego ograniczenia na wielu kolumnach w naszym przypadku FirstName i 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')
 
 Jeśli zauważyłeś instrukcję INSERT, w First Record umieściłem obie wartości Null dla FirstName i Last Name. W drugim rekordzie użyłem wartości 'Aamir' dla imienia i Null dla nazwiska. W 3 rekordzie i odwrotnie 2 rekordzie. Stąd rozumiemy, że unikatowe ograniczenie działa na obu wartościach kolumn. Dopóki łączna wartość z obu kolumn jest unikalna, pozwoli nam to wstawić nawet jedną z nich jest null.

Jeśli chciałbym wstawić inny rekord, w którym mam Null na nazwisko , pozwoli mi to bez problemu, ponieważ jest unikalny w stosunku do istniejących wartości.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 
 Sprawdźmy rekordy w tabeli za pomocą zapytania wybierającego.
Jak dodać unikalne ograniczenie w wielu kolumnach w tabeli SQL Server
Jeśli spróbujemy wstawić zduplikowane rekordy, otrzymamy poniższy błąd.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 Msg 2627, poziom 14, stan 1, wiersz 30. Naruszenie ograniczenia UNIQUE KEY „UQ_Dbo_Customer_FName_LName”. Nie można wstawić zduplikowanego klucza w obiekcie „dbo.Customer”. Zduplikowana wartość klucza to (Raza, ). Instrukcja została zakończona.



Wideo demonstracyjne:Utwórz unikalne ograniczenie dla wielu kolumn w SQL Server


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zresetować wartość kolumny tożsamości w tabeli SQL Server — samouczek SQL Server / T-SQL, część 43

  2. Trigram Wildcard – wyszukiwanie ciągów znaków w SQL Server

  3. Jak utworzyć ograniczenie klucza obcego w wielu kolumnach w SQL Server — samouczek SQL Server/TSQL — część 67

  4. SUBSTRING Polecenie w SQL:elementarz

  5. W jakiej kolumnie należy umieścić indeks klastrowy?