当目标中不存在重复项时违反主键约束错误

Ton*_* H. 7 sql sql-server insert primary-key sql-server-2008

当我尝试将单个记录插入现有表时,出现违反主键约束错误。

第一次出现该问题是在合并语句中,但我可以通过尝试单独插入记录来重现该问题。

主键位于由 hashbytes 函数生成的 varbinary(20) 值,该函数将大约 20 个列值的值串联起来。我尝试插入的 varbinary(20) 值不存在于目标表中,并且仅在源表中存在一次。当我过滤实际的列值时,结果是相同的;源中 1 条记录,目标中 0 条记录。

目标表有 101 178 878 行。主键不是表上的聚集索引,有一个bigint标识列充当聚集索引。目标或源上没有触发器。整个排序规则都是相同的 (Danish_Norwegian_CI_AS)。该实例是 SQL Server 2008 R2 标准版。

我现在完全陷入困境,我非常希望有人能提供一些帮助。

感谢您的阅读:-)

这是失败的值:0x0571F5F713CF220BB0DB057BBCE7E158CA6F89C0

在目标中,以下值最接近失败值。没有一种价值可以与失败相媲美。

0x0571F5F1238704E1A9D612F0A1648766B769E2AE 0x0571F5F713CF220BB0DB057BBCE7E158CA6F89C0 --失败的值0x0571F608CBE12A007F3DC3736D2F03D90ECCF3F7

编辑:数据库中存在损坏问题,导致意外行为。

小智 0

那么你的答案肯定是在错误中,为了找到我会做的原因(在带有回滚的事务内部)

尝试使用 update 和 insert 进行合并,而不是仅仅使用 insert 。通过 OUTPUT 部分中的合并,您可以生成说明您实际正在执行的操作(更新或插入)的代码。如果需要的话,合并的系统

如果您获得更新并且有 0 行受到影响,那么您正在与腐败问题作斗争。

如果统计信息中存在损坏,则编写索引脚本,删除它们,删除仍然保留的统计信息,再次生成索引,然后查看问题是否仍然存在。

希望对您有所帮助

沃尔特