我如何创build一个基于2列的SQL唯一约束?

我有这样一个表格:

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

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

我知道如何创build基于单列的唯一约束和非零约束,但是如何创build跨2列的唯一约束呢?

你可以试试这个:

 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] 

你可以添加唯一的约束你的领域:

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

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

希望这有助于欢呼。

这里是创build一个独特的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

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