【问题标题】:Violation of primary key constraint-- firebird SQL违反主键约束——firebird SQL
【发布时间】: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

没有返回行,所以我知道实际上没有重复。

我见过thisthisthisthis,但它们似乎都没有适用的解决方案,或者至少没有一个可行的解决方案。我也在使用 Firebird SQL,如果这有影响的话。

有人有什么想法吗?

【问题讨论】:

  • 为什么还要插入主键?
  • @Mihai 我必须这样做。这是一个非常大而复杂的项目/数据库的一部分,我们的主键都不能自动递增。所以他们必须在插入中设置。
  • 是否偶然发生了多次插入?另外,数据类型是整数吗?
  • @I_am_Batman 没有。只有一个插入。
  • 如果你使用where objid+0 = 2109900055会发生什么。在某些情况下,条目在表中,但不在索引中;使用+0 将忽略查找的索引。另一种可能性是你有一个也插入了这个值的边缘交易。 Limbo 事务已准备好,但尚未提交。

标签: sql database firebird firebird2.5


【解决方案1】:

检查 OBJID 的数据类型及其限制。我怀疑你超过了数据类型的最大大小。

【讨论】:

  • 如果是整数,则不是。
  • 是整数,所以我还不算大。
猜你喜欢
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 2012-07-15
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2021-04-14
相关资源
最近更新 更多