重新插入以前删除的行时 SQL SERVER 2017 主键冲突
Posted
技术标签:
【中文标题】重新插入以前删除的行时 SQL SERVER 2017 主键冲突【英文标题】:SQL SERVER 2017 primary key violation when re-inserting a previously deleted row 【发布时间】:2020-04-22 14:25:16 【问题描述】:我从具有由 2 个列值组成的聚集主键的表中删除了 100 行(共 500 行)。 WHERE
子句使用的列不在任何键或索引中。
DELETE myTABLE WHERE data1='0'
这些行被删除了,我运行了一个查询来检查自己。
但是,我尝试使用...将行重新插入 myTABLE 中。
INSERT INTO myTABLE (pkval1, pkval2, data1, data2)
SELECT srcVal1, srcVal2, srcData1, srcData2
FROM mySourceTable
在mySourceTable
中,srcVal
和srcVal2
列形成唯一索引,但不是主键。
结果是一个错误:
违反主键约束“PK_MYTABLE”无法在对象“dbo.myTable”中插入重复键。重复的键值是 a value in srcVal2
我查看了mySourceTable
中的所有关键值,它们都是有效的。
问题:如果我删除了这些行,为什么我不能重新插入它们?
在多年的 SQL 编程中,我从未遇到过这个问题。但我累了,我敢肯定我对一些简单的事情视而不见。
【问题讨论】:
您是否为此列设置了身份规范? 这是唯一索引的第二部分。 srcVal1 + srcVal2 不可能。主键违规错误消息将包含重复的完整元组。 Example. 我打错了... srcVal1 和 srcVal2 是唯一索引,而不是主键。 如果您从 500 行的表中删除了 100 行,则还剩下 400 行。剩下的 400 行之一的值与您尝试插入的新值冲突。 【参考方案1】:问题出在 mySourceTable 中。虽然 srcVal1+srcVal2 产生了唯一的索引值,但 myTABLE 中的 pkval2 上有一个唯一的索引。只见树木不见森林。
【讨论】:
以上是关于重新插入以前删除的行时 SQL SERVER 2017 主键冲突的主要内容,如果未能解决你的问题,请参考以下文章
sql插入数据后怎么覆盖以前的?? 比如数据库有123数据、我重新插入123时。123变成别的数字。。
UITableView 负顶部内容插入导致重新排序行时出现故障