You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建BudgetGroup记录时遇Record ID 0已存在(132)错误求助

问题分析与解决办法

核心原因

报错“已存在Record ID 0。(132)”的本质是:主键字段BudgetGroup_ID未被赋值,默认值为0,而物理表BudgetGroup中已存在BudgetGroup_ID=0的记录。你查询不到该记录,大概率是以下情况导致:

  • 当前会话的数据库隔离级别限制,无法读取该记录
  • 记录被标记为逻辑删除(比如存在未过滤的IsDeleted类字段)
  • 查询时未覆盖表的所有分区/子表(若表为分区表)

解决步骤

1. 确认表中是否存在ID=0的记录

执行以下查询强制排查(绕过默认过滤条件):

FOR EACH BudgetGroup WHERE BudgetGroup_ID = 0 NO-LOCK:
    DISPLAY BudgetGroup.*.
END.

2. 修复代码:为主键字段赋值

PROGRESS 4GL不会自动生成主键值(除非配置了序列或触发器),需手动指定唯一主键。示例修改后的代码:

define temp-table ttbudget no-undo like BudgetGroup.
define buffer b_BudgetGroup for BudgetGroup.

/* 获取下一个可用主键ID:取现有最大ID+1,表为空则初始化为1 */
DEFINE VARIABLE iNextID AS INTEGER NO-UNDO.
FOR EACH BudgetGroup NO-LOCK BY BudgetGroup_ID DESC:
    iNextID = BudgetGroup_ID + 1.
    LEAVE.
END.
IF iNextID = 0 THEN iNextID = 1.

create ttbudget.
assign
ttbudget.BudgetGroup_ID         = iNextID  /* 新增主键赋值 */
ttbudget.BudgetGroupCode        = "kepa"
ttbudget.BudgetGroupDescription = "kepa"
ttbudget.BudgetGroupIsActive    = YES
.

create b_BudgetGroup.
buffer-copy ttbudget to b_BudgetGroup.

3. 优化方案:配置主键自动生成(推荐)

为避免重复手动赋值,可给BudgetGroup_ID绑定数据库序列,或创建触发器自动生成主键值,从根源解决主键冲突问题。

4. 处理已存在的ID=0记录

若确认BudgetGroup_ID=0的记录为无效数据,且业务允许,可执行删除操作:

DELETE BudgetGroup WHERE BudgetGroup_ID = 0.

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:13:15