Подтвердить что ты не робот

Как создать уникальное ограничение 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 не будет уникальным по всем направлениям, но будет уникальным для каждого пользователя.

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

4b9b3361

Ответ 1

Вы можете попробовать следующее:

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]

Ответ 2

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

ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)

Ответ 3

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

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

Ответ 4

Вот синтаксис для создания уникального CONSTRAINT, а не уникального INDEX.

ALTER TABLE publishers 
  ADD CONSTRAINT uqc_pub_name 
  UNIQUE (pub_name)

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

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

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

Ответ 5

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
)
)