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 行受到影响,那么您正在与腐败问题作斗争。
如果统计信息中存在损坏,则编写索引脚本,删除它们,删除仍然保留的统计信息,再次生成索引,然后查看问题是否仍然存在。
希望对您有所帮助
沃尔特