我正在尝试在 SQL Server 2008 中的一个数据库表上添加一个新的唯一索引。这是一个现有表,我想要唯一索引的列已经有一些重复值。
我可以为该列设置唯一索引吗?如果是这样,怎么做?
我正在尝试在 SQL Server 2008 中的一个数据库表上添加一个新的唯一索引。这是一个现有表,我想要唯一索引的列已经有一些重复值。
我可以为该列设置唯一索引吗?如果是这样,怎么做?
如果表已经有重复值,则不能使用 UNIQUE 索引设置此列,除非删除包含该列重复值的记录。这涉及到 UNIQUE 的定义。
首先,您需要删除列上的重复值,然后您可以在其上创建唯一索引。因此,假设您的表有 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)
不,顾名思义,唯一索引表示键必须是唯一的。所以你不能
如果该列已经有重复值,那么我建议您创建一个唯一的复合键。
例如,为了处理这个表设计的问题,您需要在表 CustomerID/ProductID 列上创建一个唯一约束:
在 CustomerProducts (CustomerID, ProductID) 上创建唯一索引 cust_products_unique
因此,从本质上讲,字段组合可确保索引是唯一的。
问候
在 SQL Server 2008 中可能并非如此,但是您可以使用 Management Studio 在更高版本(例如 2014)中执行此操作。