当我尝试将其插入现有表时,我在单个记录上违反了主键约束错误。
第一次出现问题是在合并声明中,但我可以重现尝试单独插入记录的问题。
主键是在一个varbinary(20)值上,该值是在大约20个列值的串联上由hashbytes函数生成的。我想要插入的varbinary(20)值不存在于目标表中,并且它仅在源表中出现一次。当我过滤实际的列值时,结果是一样的;源中的一条记录和目标中的零记录。
目标表有101 178 878行。主键不是表上的聚簇索引,有一个bigint标识列作为聚簇索引。目标或源上没有触发器。整理的校对是相同的(Danish_Norwegian_CI_AS)。该实例是SQL Server 2008 R2标准版。
我现在完全陷入困境,我希望有人能提供一些帮助。
感谢您阅读: - )
这是失败的值: 0x0571F5F713CF220BB0DB057BBCE7E158CA6F89C0
在目标中,以下值最接近失败的值。没有价值等于失败的价值。
0x0571F5F1238704E1A9D612F0A1648766B769E2AE 0x0571F5F713CF220BB0DB057BBCE7E158CA6F89C0 - 失败的值 0x0571F608CBE12A007F3DC3736D2F03D90ECCF3F7
编辑: 数据库中存在损坏问题,导致意外行为。
答案 0 :(得分:0)
你的答案肯定是错误的, 要找到原因,我会做(在带回滚的事务中)
尝试与更新和插入进行合并,而不是jsut插入。 通过OUTPUT部分中的合并,您可以生成代码,说明您实际在做什么,更新或插入。 the sysntax for merge if you need it
如果您获得更新并且0行受到影响,那么您正在与腐败问题进行斗争。
如果coruption在统计信息中,则编写索引脚本,删除它们,删除仍然存在的统计信息,再次生成索引并查看是否仍有问题。
希望得到帮助
沃尔特