2

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

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

4

5 回答 5

5

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

于 2011-09-02T13:02:06.240 回答
5

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

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)
于 2011-09-02T13:03:28.930 回答
1

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

看到这个

于 2011-09-02T13:02:41.013 回答
0

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

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

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

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

问候

于 2011-09-02T13:18:21.973 回答
0

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

  1. 右键单击您的表
  2. 选择设计
  3. 展开“身份规范”并将(是身份)设置为是
  4. 节省
于 2016-05-11T16:03:12.047 回答