Как я могу создать уникальное ограничение SQL на основе 2 столбцов? - PullRequest
55 голосов
/ 10 июля 2009

У меня есть такая таблица:

|UserId   |  ContactID |  ContactName 
---------------------------------------
| 12456   |  Ax759     |  Joe Smith
| 12456   |  Ax760     |  Mary Smith
| 12458   |  Ax739     |  Carl Lewis
| 12460   |  Ax759     |  Chuck Norris
| 12460   |  Bx759     |  Bruce Lee

Мне нужно добавить ограничение в эту таблицу, чтобы ни один пользователь не мог иметь повторяющиеся идентификаторы контактов. Пользователи импортируют данные из различных внешних систем, поэтому ContactId не будет уникальным для всех пользователей, но будет уникальным для каждого пользователя.

Я знаю, как создавать уникальные и ненулевые ограничения на основе отдельных столбцов, но как я могу создать уникальные ограничения для 2 столбцов?

Ответы [ 5 ]

57 голосов
/ 10 июля 2009

Вы можете попробовать это:

CREATE UNIQUE CLUSTERED INDEX index_name ON TABLE (col1,col2)
or
CREATE UNIQUE NONCLUSTERED INDEX index_name ON TABLE (col1,col2)

или

ALTER TABLE [dbo].[TABLE] ADD CONSTRAINT
UNIQUE_Table UNIQUE CLUSTERED
(
col1,
col2
) ON [PRIMARY]
35 голосов
/ 10 июля 2009

Вы можете добавить уникальное ограничение для ваших полей:

ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)
6 голосов
/ 05 июля 2011

Вы можете попробовать ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN).

Надеюсь, это поможет веселит.

3 голосов
/ 10 июля 2009

Вот синтаксис для создания уникального ОГРАНИЧЕНИЯ в отличие от уникального ИНДЕКСА.

ALTER TABLE publishers 
  ADD CONSTRAINT uqc_pub_name 
  UNIQUE (pub_name)

Важно отметить, что существуют тонкие различия, зависящие от того, какой метод вы используете для определения уникальности столбца.

См. Следующий справочник MSDN для интересного их прохождения:

http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx

1 голос
/ 10 июля 2009
CREATE TABLE [LineItems](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [OrderID] [int] NOT NULL,
    [LineItemNumber] [int] NOT NULL,
 CONSTRAINT [PK_LineItems] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
),
 CONSTRAINT [UC_LineItems] UNIQUE NONCLUSTERED 
(
    [OrderID] ASC,
    [LineItemNumber] ASC
)
)
...