我有一张像这样的表:
|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不会是唯一的,但每个用户都是唯一的。
我知道如何基于单列创建唯一和非空的约束但是如何在2列中创建唯一的约束?
答案 0 :(得分: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]
答案 1 :(得分:34)
您可以在字段中添加唯一约束:
ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)
答案 2 :(得分:6)
您可以尝试ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN)
。
希望这会有所帮助 欢呼声。
答案 3 :(得分:3)
以下是创建唯一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
答案 4 :(得分: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
)
)