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

如何在FDbatchmove组件追加数据操作中排除主键字段?

FDBatchMove追加数据时排除主键字段解决UNIQUE约束冲突

[FireDac][Phys][SQLite] ERROR: UNIQUE constraint failed:AG2.M_key 异常的触发原因是批量导入时将源表的M_key主键值写入目标表,和目标表现有主键值重复,或和目标表主键自增序列生成的值冲突。排除M_key字段让目标表自行生成主键值即可解决,有两种可直接落地的实现方案:

方案1:通过字段映射排除主键(推荐)

不需要修改源数据集的查询逻辑,直接通过FDBatchMove的映射规则过滤主键字段:

  • 关闭自动映射:将FDBatchMove组件的Options.AutoMapFields属性设为False,避免组件自动把所有字段(包括M_key)做映射
  • 清空默认生成的映射列表,手动添加需要同步的字段映射,跳过M_key即可
    运行时代码示例:
    FDBatchMove1.Mappings.Clear;
    // 按 源字段名=目标字段名 的格式,添加所有非主键字段的映射
    FDBatchMove1.Mappings.Add('col_a=col_a');
    FDBatchMove1.Mappings.Add('col_b=col_b');
    FDBatchMove1.Mappings.Add('col_c=col_c');
    // 其余非主键字段按相同规则补充
    FDBatchMove1.Execute;
    
  • 如果是设计期配置,直接双击FDBatchMove组件打开Mappings编辑器,选中M_key对应的映射条目删除即可。

方案2:从源数据集层面过滤主键

如果不需要保留源表的M_key值,直接修改源数据集的查询语句,不查询M_key字段即可:

  • 将源FDQuery/FDTable的查询SQL从SELECT * FROM 源表改为SELECT 非主键字段1,非主键字段2,... FROM 源表,完全不返回M_key字段
  • 保持Options.AutoMapFields := True,组件会自动映射查询返回的所有字段,不会写入目标表的M_key字段,目标表会按自身主键规则自动生成合法的M_key值。

注意:如果AG2表的M_key不是自增字段,排除字段前需确认M_key设置了默认值生成规则(比如触发器、默认值函数),否则会触发非空约束错误。

内容的提问来源于stack exchange,提问作者A.K.D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:15:15