跳转到主要内容

表格和列

UPSERT 查询行为

在表结构模式和映射模式下,均按列配置 UPSERT 设置。右键单击某列,然后从上下文菜单中选择 UPSERT 设置。

随即打开 UPSERT 设置 对话框。默认情况下,启用 UPSERT 设置 开关为 ON,这意味着端口会先检查目标中是否已存在记录,再决定执行 INSERT 还是 UPDATE。

用于确定记录是否存在的查询由以下部分中描述的逻辑控制。

UPSERT 设置已启用

当 启用 UPSERT 设置 处于开启状态时,查询行为取决于在 UPSERT 设置 列表中选择的选项:UPSERT by(按单列匹配)或 Query to select UPSERT key(使用自定义查找查询)。

按 ID UPSERT

在 UPSERT 设置 列表中选择 UPSERT by 并选择表的键列后,端口会发出查询,以确定是否存在具有匹配键值的任何记录:
匹配结果更新;没有匹配结果导致插入。 如果输入 XML 中不存在键列,则始终插入记录:

按非键列进行 UPSERT

在 UPSERT 设置 列表中选择 UPSERT by 并选择非键列后,端口会发出查询,以确定是否存在该列包含匹配值的记录,SELECT 语句以表的主键为目标(以下示例演示向 Orders 表执行 UPSERT):
SELECT 查询始终以 SELECT 语句中表的键列为目标。如果匹配成功,则输入 XML 中的数据将更新到数据源中。如果没有匹配,则插入记录。
如果输入中未指定所选的 UPSERT by 列,则查找将与 NULL 值一起使用,如以下查询所示:

使用自定义查询

在 UPSERT 设置 列表中选择 Query to select UPSERT key 后,可以编写自定义查询来确定 UPSERT 键。这样可以使用比单列匹配更复杂的逻辑来执行查找。考虑以下查询:
在此示例中,必须选择表的键列,以便为 UPDATE 提供足够的条件。@OrderID 语法用于引用匹配输入 XML 中的值。还可以使用静态值:'Active' 周围的引号表示该子句使用静态值。 同样,键列的成功匹配用于形成更新请求。如果没有匹配,则插入记录。
当对数据库插入的行为有疑问时,请查看 UPSERT 尝试的 .log 文件:用于指导该行为的逻辑的完整细分将发送到日志文件。

UPSERT 设置已禁用

要对某列禁用 UPSERT 行为,请打开 UPSERT 设置 对话框(右键单击目标列并选择 UPSERT 设置),将 启用 UPSERT 设置 切换为 OFF,然后单击 应用。 禁用 UPSERT 设置后,端口仅发出 INSERT 查询。检查输入映射的代码视图显示表的 action 属性是 insert:
无论主键是否存在,向表发出的所有查询都被视为插入。要根据表更新所有收到的记录,可以将此操作关键字设置为 update,如以下代码片段所示:
当操作定义为 update 时,应用程序期望表的键列(例如 Id)存在。如果未提供键列,则 UPDATE 命令的效果可能会因目标数据库类型而异,因此可能会看到更改的行数比预期多,或者根本没有更改。
##知行之桥工作流示例