【问题标题】:How can I create a SQL unique constraint based on 2 columns?如何创建基于 2 列的 SQL 唯一约束?
【发布时间】:2010-11-09 17:23:59
【问题描述】:

我有一张这样的表:

|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 不会是唯一的,而是在每个用户的基础上都是唯一的。

我知道如何基于单列创建唯一和非 Null 约束,但如何创建跨 2 列的唯一约束?

【问题讨论】:

    标签: sql-server sql-server-2005 sql-server-2008 constraints unique-constraint


    【解决方案1】:

    你可以试试这个:

    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]
    

    【讨论】:

    • 这两种方法有什么区别?在某些情况下,一个人比另一个人更受欢迎吗?索引方法在大型数据集上会更快吗?
    • @Zapnologica 请检查有关此特定主题的其他问题:dba.stackexchange.com/questions/144/…
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢!工作正常
    【解决方案3】:

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

    希望这会有所帮助 干杯。

    【讨论】:

      【解决方案4】:
      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
      )
      )
      

      【讨论】:

        【解决方案5】:

        这里是创建唯一 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

        【讨论】:

          猜你喜欢
          • 2010-09-09
          • 2012-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-26
          • 1970-01-01
          相关资源
          最近更新 更多