6

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

问题第一次出现是在合并语句中,但我可以通过 .

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

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

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

感谢您阅读:-)

这是失败的值:0x0571F5F713CF220BB0DB057BBCE7E158CA6F89C0

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

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

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

4

2 回答 2

0

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

尝试使用更新和插入进行合并,而不是插入插入。通过 OUTPUT 部分中的合并,您可以生成代码,说明您实际在做什么,更新或插入。如果需要,合并的 sysntax

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

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

希望能有所帮助

沃尔特

于 2014-02-15T11:44:56.827 回答
0

就我而言,我在做

INSERT INTO...
SELECT ... FROM

问题是SELECT ... FROM返回不止一行。天啊

于 2021-11-08T10:38:28.777 回答