61

我有一个像这样的表:

|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 列创建唯一约束?

4

5 回答 5

68

你可以试试这个:

CREATE UNIQUE CLUSTERED INDEX index_name ON TABLE (col1,col2)

或者

CREATE UNIQUE NONCLUSTERED INDEX index_name ON TABLE (col1,col2)

或者

ALTER TABLE [dbo].[TABLE] ADD CONSTRAINT
    UNIQUE_Table UNIQUE CLUSTERED
    (
       col1,
       col2
    ) ON [PRIMARY]
于 2009-07-10T13:47:43.790 回答
42

您可以为您的字段添加唯一约束:

ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)
于 2009-07-10T13:49:02.960 回答
6

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

希望这有助于欢呼。

于 2011-07-05T07:13:15.797 回答
3
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
)
)
于 2009-07-10T13:51:02.710 回答
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

于 2009-07-10T13:55:38.383 回答