Skip to main content
UPSERT()函数用于插入或更新数据到目标表单中。在插入数据时,如果目标表单中已存在该条数据,那么将执行更新数据,如果目标表单中不存在该条数据,那么将执行插入数据。

格式

UPSERT()函数的格式为:
  • 目标表: 要插入/更新数据的目标表单。
  • 主条件: 主条件用于定位更新哪条数据。主条件是由逻辑函数构成:
  • 子条件:
  • 目标列:
  • 目标值: 指目标列要更新成的值,目标值可以由当前录入表的某个组件值,要更新目标表某个组件值,固定值通过其他函数组合而成。

使用案例

案例一:普通组件数据插入时,更新目标表的普通组件数据

  • 使用的表单
  • 需求
进货表中录入一个商品,如果存货表中存在相同商品名的数据,则在该商品的存货量的基础上加上进货量。如果存货表中查找不到该商品名,则往存货表中插入该商品名,存货量为进货量。
  • 公式配置详情&公式解析
公式解析:
  • 目标表: 存货表。
  • 主条件 :EQ(存货表.商品名, 商品名)。更新的数据是存货表中商品名为录入表录入数据的商品名。
  • 子条件 :由于更新的是「存货表」中的普通组件:商品名和存货量,不涉及明细,因此子条件填写为""
  • 目标列: 存货表.商品名。
  • 目标值: 商品名。 如果查找不到数据,在插入数据时,存货表的商品名值为进货表的商品名值。
  • 目标列: 存货表.存货量
  • 目标值: 存货表.存货量 + 进货量。 根据条件匹配到存货商品后,在原来存货量的基础上加上这次的进货量。

案例二:子表单组件数据插入时,更新目标表的普通组件数据

  • 使用的表单
  • 需求
进货表下有进货明细,一次可以录入多个商品。对于录入的多个商品,在存货表中假如查找不到对应商品(商品名和商品类别都相同时,表示商品相同),则插入数据。如果能找到对应商品,则更新对应商品的存货量(存货量=原来的存货量+进货量)。
  • 公式配置详情&公式解析

案例三:普通组件数据插入时,更新到目标表的子表单组件数据

  • 使用的表单
  • 需求
「风险类型」表单,维护着风险类型和该类型下有哪些风险事件的数据。「风险事件」表单记录的是每个风险事件的详情。
  • 公式配置详情&公式解析
公式配置解析:
公式配置解析

注意事项

  • 不能既更新普通组件,又要更新明细下的值。如果有这种场景,请分成两个 UPSERT 函数,一个用来更新普通组件,一个用来更新明细下的数据。
  • 在上面讲解的商品进货存货的场景中,其实当表单数据删除时,是需要把存货量扣除的,此时可以在「表单删除」上,配置 UPDATE 函数,用于扣除数据,从而保证数据是一致的。
  • UPSERT 函数一次最多只能 更新 100 条主表单数据 ,超出会报错导致提交失败。 免费版 一次最多只能插入 某条表单数据下 50 个明细数据, 轻享版、专业版 一次 可更新插入 500 条明细数据 ( 默认是50条,需要在表单编辑页面设置最大条数为500条 ) ,超出也会报错提示「提交失败」。
  • UPSERT 函数一次只能操作表单下一个明细组件的数据。如果有操作多个明细组件数据的需求,请配置多个UPSERT 函数。
  • 主条件和子条件是由逻辑函数构造的。除了 AND 和 OR 之外,其他逻辑函数第一个参数必须是目标表中的组件,两个参数的位置不能调换。
  • 配置 UPSERT 函数将明细数据插入(更新)到另一张表,当明细下有两条数据都命中相同的条件时,会是另一张表插入两条数据,而不会是第一条明细数据插入,第二条明细数据更新。
  • 高级公式组件支持范围如下