Вопрос по sql-server-2008, constraints, sql-server-2005, sql-server, unique-constraint – Как я могу создать уникальное ограничение SQL на основе 2 столбцов?

54

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

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

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

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

Ваш Ответ

5   ответов
1
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
)
)
6

ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN).

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

56

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

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]
В чем разница между этими двумя методами? Есть ли определенные случаи, когда один предпочтительнее другого? Будет ли индексный подход быстрее для большого набора данных?
@Zapnologica Пожалуйста, проверьте этот другой вопрос по этой конкретной теме:dba.stackexchange.com/questions/144/…
32

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

ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)
Спасибо & APOS; s! Работает отлично
3

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

ALTER TABLE publishers 
  ADD CONSTRAINT uqc_pub_name 
  UNIQUE (pub_name)

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

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

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

Похожие вопросы