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

时间:2013-08-07 12:03:24

标签: sql sql-server sql-server-2008 insert primary-key

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

第一次出现问题是在合并声明中,但我可以重现尝试单独插入记录的问题。

主键是在一个varbinary(20)值上,该值是在大约20个列值的串联上由hashbytes函数生​​成的。我想要插入的varbinary(20)值不存在于目标表中,并且它仅在源表中出现一次。当我过滤实际的列值时,结果是一样的;源中的一条记录和目标中的零记录。

目标表有101 178 878行。主键不是表上的聚簇索引,有一个bigint标识列作为聚簇索引。目标或源上没有触发器。整理的校对是相同的(Danish_Norwegian_CI_AS)。该实例是SQL Server 2008 R2标准版。

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

感谢您阅读: - )

这是失败的值: 0x0571F5F713CF220BB0DB057BBCE7E158CA6F89C0

在目标中,以下值最接近失败的值。没有价值等于失败的价值。

0x0571F5F1238704E1A9D612F0A1648766B769E2AE 0x0571F5F713CF220BB0DB057BBCE7E158CA6F89C0 - 失败的值 0x0571F608CBE12A007F3DC3736D2F03D90ECCF3F7

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

1 个答案:

答案 0 :(得分:0)

你的答案肯定是错误的, 要找到原因,我会做(在带回滚的事务中)

尝试与更新和插入进行合并,而不是jsut插入。 通过OUTPUT部分中的合并,您可以生成代码,说明您实际在做什么,更新或插入。 the sysntax for merge if you need it

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

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

希望得到帮助

沃尔特