【发布时间】:2011-09-02 12:58:53
【问题描述】:
我正在尝试在 SQL Server 2008 中的一个数据库表上添加一个新的唯一索引。这是一个现有表,并且我想要唯一索引的列已经有一些重复值。
我可以为该列设置唯一索引吗?如果有,怎么做?
【问题讨论】:
标签: sql sql-server-2008 unique-index
我正在尝试在 SQL Server 2008 中的一个数据库表上添加一个新的唯一索引。这是一个现有表,并且我想要唯一索引的列已经有一些重复值。
我可以为该列设置唯一索引吗?如果有,怎么做?
【问题讨论】:
标签: sql sql-server-2008 unique-index
如果表中已有重复值,则不能使用 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)中执行此操作。
【讨论】: