我正在尝试在SQL Server 2008中的一个数据库表上添加新的唯一索引。这是一个现有表,我想要唯一索引的列已经有一些重复值。
我可以为该列设置唯一索引吗?如果是这样,怎么样?
答案 0 :(得分:5)
首先,您需要删除列上的重复值,然后才能在其上创建唯一索引。因此,我们假设您的表格有两列,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)
答案 1 :(得分:4)
如果表已有重复值,则无法使用UNIQUE索引设置此列,除非您删除包含该列重复值的记录。这是UNIQUE的定义。
答案 2 :(得分:1)
不,顾名思义,唯一索引表示密钥必须是唯一的。所以你不能
答案 3 :(得分:0)
如果列已经有重复的值,那么我建议您改为创建一个唯一的复合键。
e.g。 因此,要使用此表设计处理该问题,您需要在表CustomerID / ProductID列上创建唯一约束:
在CustomerProducts(CustomerID,ProductID)上创建唯一索引cust_products_unique
因此,实质上,字段组合可确保索引是唯一的。
此致
答案 4 :(得分:0)
在SQL Server 2008中可能不是这样,但是您可以使用Management Studio在2014之类的更高版本中执行此操作。