【发布时间】:2016-08-24 23:39:50
【问题描述】:
我遇到了一个错误
违反 PRIMARY 或 UNIQUE KEY 约束
当我尝试运行这个 insert 语句(从 C# 接口)时:
INSERT INTO descript (PROPID, OBJID, NAME, CLASSID, LASTUPDATE,
HISTORY, VIVDRULE, CAPTION, PROMPT, DESCRIPTION)
VALUES (@PROPID, //110
@OBJID, //2109900055
@NAME, //Custom10
@CLASSID, //3
@LASTUPDATE, //4/29/2016
@HISTORY, // ''
@VIVDRULE, //1
@CAPTION, //test10
@PROMPT, //yo
@DESCRIPTION // ''
)
具体错误是:
违反表“DESCRIPT”* 上的 PRIMARY 或 UNIQUE KEY 约束“DESCRIPTOR$OBJID”。
OBJID 是该表的主键。
但是,如果我运行
select *
from descript
where objid = 2109900055
没有返回行,所以我知道实际上没有重复。
我见过this、this、this 和this,但它们似乎都没有适用的解决方案,或者至少没有一个可行的解决方案。我也在使用 Firebird SQL,如果这有影响的话。
有人有什么想法吗?
【问题讨论】:
-
为什么还要插入主键?
-
@Mihai 我必须这样做。这是一个非常大而复杂的项目/数据库的一部分,我们的主键都不能自动递增。所以他们必须在插入中设置。
-
是否偶然发生了多次插入?另外,数据类型是整数吗?
-
@I_am_Batman 没有。只有一个插入。
-
如果你使用
where objid+0 = 2109900055会发生什么。在某些情况下,条目在表中,但不在索引中;使用+0将忽略查找的索引。另一种可能性是你有一个也插入了这个值的边缘交易。 Limbo 事务已准备好,但尚未提交。
标签: sql database firebird firebird2.5