Как я могу создать уникальное ограничение SQL на основе двух столбцов?

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

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

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

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


person brendan    schedule 10.07.2009    source источник


Ответы (4)


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

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

or

ALTER TABLE [dbo].[TABLE] ADD CONSTRAINT
UNIQUE_Table UNIQUE CLUSTERED
(
col1,
col2
) ON [PRIMARY]
person Jonathan    schedule 10.07.2009
comment
В чем разница между двумя методами? Есть ли определенные случаи, когда одно предпочтительнее другого? Будет ли индексный подход быстрее работать с большим набором данных? - person Zapnologica; 07.07.2015
comment
@Zapnologica, пожалуйста, ответьте на другой вопрос по этой конкретной теме: dba.stackexchange.com/questions/144/ - person Jonathan; 08.07.2015

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

ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)
person AdaTheDev    schedule 10.07.2009
comment
Спасибо! Работает отлично - person TheBosti; 26.02.2017

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

Надеюсь, это поможет развлечься.

person Tamseyc    schedule 05.07.2011

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

ALTER TABLE publishers 
  ADD CONSTRAINT uqc_pub_name 
  UNIQUE (pub_name)

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

См. Следующую ссылку MSDN для интересного пошагового руководства по ним:

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

person John Sansom    schedule 10.07.2009