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).
我想知道如何处理将2列组合在一起的唯一键约束。这样以前存储在数据库中的值不是那种格式。这样就显示了上面的错误,那么如何克服这一点,以便所有工作都可以完成,数据库中的列值不会被删除
答案 0 :(得分:0)
如果我正确地关注了您,您有一个重复的键,您想要忽略但仍希望在未来应用唯一约束?我不认为这是可能的。您需要删除重复的行(或更新它以使其不重复),将复制的数据移动到没有唯一索引的存档表中,或者将索引添加到现有表中而没有唯一约束。
我有待纠正,但我不认为还有其他办法。
答案 1 :(得分:0)
让我们假设您要在列column1
column2
和dbo.tblhm
这将假设表column1, column2
dbo.tblhm
值的任何组合的重复。
根据您的错误,(45560, 44200)
的{{1}}值的以下组合column1, column2
出现在1行以上,因此约束失败。
您需要做的是首先使用UPDATE语句清理数据,以便在尝试创建约束之前更改重复行中的column1 or column2
值。
AFAIK,在Oracle中,您有“novalidate
”关键字,可用于在不清理现有数据的情况下实现您的目标。但至少我没有意识到在没有先清理数据的情况下在SQL Server中实现这一目标
答案 2 :(得分:0)
错误意味着它所说的内容 - 有多个行具有相同的密钥。
即。对
CREATE UNIQUE INDEX New_id1 on dbo.tblhm(Column1, Column2)
对于Column1和Column2
,有多个行具有相同的值所以要么