现有数据库表中的唯一索引

时间:2011-09-02 12:58:54

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

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

我可以为该列设置唯一索引吗?如果是这样,怎么样?

5 个答案:

答案 0 :(得分:5)

首先,您需要删除列上的重复值,然后才能在其上创建唯一索引。因此,我们假设您的表格有两列,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)

答案 1 :(得分:4)

如果表已有重复值,则无法使用UNIQUE索引设置此列,除非您删除包含该列重复值的记录。这是UNIQUE的定义。

答案 2 :(得分:1)

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

See this

答案 3 :(得分:0)

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

e.g。 因此,要使用此表设计处理该问题,您需要在表CustomerID / ProductID列上创建唯一约束:

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

因此,实质上,字段组合可确保索引是唯一的。

此致

答案 4 :(得分:0)

在SQL Server 2008中可能不是这样,但是您可以使用Management Studio在2014之类的更高版本中执行此操作。

  1. 右键单击表格
  2. 选择设计
  3. 展开"身份规范"并设置(是标识)为是
  4. 保存