如何创建基于2列的SQL唯一约束?(How can I create a SQL unique co

2019-06-25 14:33发布

我有这样一个表:

|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列的唯一约束上?

Answer 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]


Answer 2:

您可以添加唯一约束土特产品您的字段:

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


Answer 3:

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

希望这有助于欢呼声。



Answer 4:

以下是创建一个唯一约束,而不是唯一索引的语法。

ALTER TABLE publishers 
  ADD CONSTRAINT uqc_pub_name 
  UNIQUE (pub_name)

要注意,根据您所使用的enfore表示一列的唯一方法,其中细微的差别是很重要的。

看到这些有趣的演练以下MSDN参考:

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



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


文章来源: How can I create a SQL unique constraint based on 2 columns?