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

nco*_*der 1 sql unique-index sql-server-2008

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

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

Jen*_*r S 5

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


Lam*_*mak 5

首先,您需要删除列上的重复值,然后可以在其上创建唯一索引。因此,假设您的表格有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)
Run Code Online (Sandbox Code Playgroud)