【问题标题】:Unique index in already existing database table已有数据库表中的唯一索引
【发布时间】:2011-09-02 12:58:53
【问题描述】:

我正在尝试在 SQL Server 2008 中的一个数据库表上添加一个新的唯一索引。这是一个现有表,并且我想要唯一索引的列已经有一些重复值。

我可以为该列设置唯一索引吗?如果有,怎么做?

【问题讨论】:

    标签: sql sql-server-2008 unique-index


    【解决方案1】:

    如果表中已有重复值,则不能使用 UNIQUE 索引设置此列,除非删除包含该列重复值的记录。这涉及到 UNIQUE 的定义。

    【讨论】:

      【解决方案2】:

      首先,您需要删除列上的重复值,然后您可以在其上创建唯一索引。因此,假设您的表有 2 列,idcolumn1。要删除重复值,您需要选择一个,它可以是随机的,也可以是某种顺序的。所以它会是这样的:

      WITH CTE AS
      (
           SELECT *, ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY Id) Corr
           FROM YourTable
      )
      DELETE FROM CTE
      WHERE Corr > 1
      
      CREATE UNIQUE INDEX I_Unique ON YourTable(Column1)
      

      【讨论】:

        【解决方案3】:

        不,顾名思义,唯一索引表示键必须是唯一的。所以你不能

        See this

        【讨论】:

          【解决方案4】:

          如果该列已经有重复值,那么我建议您创建一个唯一的复合键。

          例如 因此,要处理此表设计的问题,您需要在表 CustomerID/ProductID 列上创建唯一约束:

          在 CustomerProducts(CustomerID、ProductID)上创建唯一索引 cust_products_unique

          所以本质上是字段的组合确保索引是唯一的。

          问候

          【讨论】:

            【解决方案5】:

            在 SQL Server 2008 中可能并非如此,但您可以使用 Management Studio 在更高版本(例如 2014)中执行此操作。

            1. 右键单击您的表格
            2. 选择设计
            3. 展开“身份规范”并将(是身份)设置为是
            4. 保存

            【讨论】:

              猜你喜欢
              • 2019-09-13
              • 1970-01-01
              • 2021-02-06
              • 2013-06-11
              • 2010-09-05
              • 2015-05-04
              • 2023-03-08
              • 1970-01-01
              • 2019-07-23
              相关资源
              最近更新 更多