我如何创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 ) )