Sql server 2005 当表中的值显示错误时,如何对表中的2列应用唯一键约束

Sql server 2005 当表中的值显示错误时,如何对表中的2列应用唯一键约束,sql-server-2005,Sql Server 2005,我想知道如何处理将两列放在一起的唯一键约束。这样以前存储在数据库中的值就不是那种格式了。这样,它向我显示了上述错误,那么如何克服这种错误,以便可以完成所有工作,并且如果我正确地理解,数据库中的任何列值都不会被删除,您有一个要忽略但仍要应用唯一约束的重复密钥?我认为这是不可能的。您需要删除重复行(或进行更新以使其不重复),将重复数据移动到没有唯一索引的存档表中,或将索引添加到没有唯一约束的现有表中 我需要更正,但我认为没有其他方法可以解决这个问题。让我们假设您正在为列创建唯一索引:column1和

我想知道如何处理将两列放在一起的唯一键约束。这样以前存储在数据库中的值就不是那种格式了。这样,它向我显示了上述错误,那么如何克服这种错误,以便可以完成所有工作,并且如果我正确地理解,数据库中的任何列值都不会被删除,您有一个要忽略但仍要应用唯一约束的重复密钥?我认为这是不可能的。您需要删除重复行(或进行更新以使其不重复),将重复数据移动到没有唯一索引的存档表中,或将索引添加到没有唯一约束的现有表中


我需要更正,但我认为没有其他方法可以解决这个问题。

让我们假设您正在为列创建唯一索引:
column1
column2
在您的表中
dbo.tblhm

这将假定在表
dbo.tblhm

根据您的错误,以下
(4556044200)
列1、列2的值组合出现在多行中,因此约束失败

您需要做的是在尝试创建约束之前,首先使用UPDATE语句清理数据,以更改重复行中的
column1或column2


另外,在Oracle中,您可以使用“
novalidate
”关键字来实现您想要做的事情,而无需清理现有数据。但至少在SQL Server中,我不知道有什么方法可以在不首先清理数据的情况下实现这一点。错误的意思正是它所说的——有多行具有相同的键

i、 e.为了

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found 
for the object name 'dbo.tblhm' and the index name 'New_id1'. The duplicate 
key value is (45560, 44200).
Column1和Column2有多行具有相同的值

所以

  • 您的数据已损坏(例如,插入时未检查重复项)-在重新创建索引之前,您需要查找并合并/删除重复项
  • 或者您的索引不能是唯一的(例如,有一个有效的原因可以解释为什么可以有多行使用此键,例如在业务级别)

谢谢你的回答,事实上我也这么想
CREATE UNIQUE INDEX New_id1 on dbo.tblhm(Column1, Column2)