如何基于2列创建SQL唯一约束?

bre*_*dan 57 sql-server sql-server-2005 constraints unique-constraint sql-server-2008

我有一个像这样的表:

|UserId   |  ContactID |  ContactName 
---------------------------------------
| 12456   |  Ax759     |  Joe Smith
| 12456   |  Ax760     |  Mary Smith
| 12458   |  Ax739     |  Carl Lewis
| 12460   |  Ax759     |  Chuck Norris
| 12460   |  Bx759     |  Bruce Lee
Run Code Online (Sandbox Code Playgroud)

我需要为此表添加一个约束,以便没有用户可以拥有重复的联系人ID.用户正在从各种外部系统导入数据,因此ContactId不是全面唯一的,但在每个用户的基础上是唯一的.

我知道如何基于单列创建唯一和非空的约束,但是如何在2列中创建唯一的约束?

Jon*_*han 59

你可以试试这个:

CREATE UNIQUE CLUSTERED INDEX index_name ON TABLE (col1,col2)
or
CREATE UNIQUE NONCLUSTERED INDEX index_name ON TABLE (col1,col2)
Run Code Online (Sandbox Code Playgroud)

要么

ALTER TABLE [dbo].[TABLE] ADD CONSTRAINT
UNIQUE_Table UNIQUE CLUSTERED
(
col1,
col2
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

  • 两种方法有什么区别?在某些情况下,有一个优先于另一个的情况吗?在大数据集上索引方法会更快吗? (2认同)

Ada*_*Dev 37

您可以在字段中添加唯一约束:

ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)
Run Code Online (Sandbox Code Playgroud)


Tam*_*eyc 6

你可以试试ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN).

希望这有助于欢呼.