Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да създадете уникално ограничение за множество колони в SQL Server - SQL Server / TSQL урок, част 96

Сценарий:

Вие работите като разработчик на SQL Server, от вас се иска да предоставите скриптове за създаване на таблица dbo.Customer с уникално ограничение за колоните Име и Фамилия.

Решение:

Както знаем, че уникалното ограничение в SQL Server е създадено върху колона или колони, за да ограничи колоната/ите, за да приемат само уникални стойности.

Скриптът по-долу може да се използва за създаване на уникално ограничение върху множество колони в нашия случай име и фамилия.

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')
 
 Ако сте забелязали инструкцията за вмъкване, в първия запис поставих и двете стойности Null за FirstName и Last Name. Във втория запис използвах стойността 'Aamir' за собствено име и Null за фамилно име. В 3-ти запис е обратно на 2-ри запис. Оттук разбираме, че уникалното ограничение работи върху стойностите на двете колони. Докато комбинираната стойност от двете колони е уникална, ще ни позволи да вмъкнем дори една от тях да е нула.

Ако искам да вмъкна друг запис, в който имам Null за фамилно име , ще ми позволи без проблем, тъй като е уникален от съществуващите стойности.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 
 Нека проверим записите в таблицата с помощта на заявка за избор.
Как да добавите уникално ограничение за множество колони в таблица на SQL Server
Ако се опитаме да вмъкнем дублиращи се записи, ще получим грешка по-долу.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 Msg 2627, ниво 14, състояние 1, ред 30 Нарушение на ограничението UNIQUE KEY 'UQ_Dbo_Customer_FName_LName'. Не може да се вмъкне дублиран ключ в обект 'dbo.Customer'. Стойността на дублирания ключ е (Raza, ). Изявлението е прекратено.



Видео демонстрация:Създайте уникално ограничение за множество колони в 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. Събития на изчакване на SQL сървър -2

  2. Мога ли да използвам израз CASE в условие JOIN?

  3. Възстановяване на достъпа до екземпляра на SQL Server без рестартиране

  4. Как да стартирате задача на агент на SQL Server с помощта на T-SQL

  5. Как виждате ЦЕЛИЯ текст от ntext или nvarchar(max) в SSMS?