2011-09-02 62 views
1

我试图在SQL Server 2008中的一个数据库表上添加一个新的唯一索引。这是一个现有表和我希望唯一索引已经有一些重复的列值。已有数据库表中的唯一索引

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

回答

0

如果列已经有重复的值,那么我会建议你创建一个独特的复合键代替。

例如 因此,要处理这个问题与此表的设计,你需要在表上创建客户ID唯一约束/产品ID列:

创建CustomerProducts唯一索引cust_products_unique(客户ID,产品ID)

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

问候

3

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

1

没有顾名思义,唯一的索引说,关键必须是唯一的。所以,你不能

See this

4

首先,你是要去需要删除您列重复的值,然后就可以在其上创建唯一索引。所以我们假设你的表有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) 
0

可能不会在SQL Server 2008是真实的,但是你可以使用Management Studio这样做在以后的版本,如2014年

  1. 右键点击你的表
  2. 选择展开“标识规范”设计
  3. ,并设置(是身份)为是
  4. 保存