跳转到主要内容

XML 模型

端口将知行之桥中的 表建模为 XML。建模遵循以下结构:
  • 父元素标识要插入的表。
  • 每个子元素对应目标表中的一列。
这在 XML 元素和 值之间建立了连接,这允许端口从传入的 XML 文档中读取值并在 INSERT 或 UPDATE 查询中使用它们。 单击配置面板上方的 </> 代码 可以查看表的 XML 模型。以下 XML 是名为 Account 的表的简化示例模型,它被建模为 XML 元素 <Account>
在上面的例子中,Idaccount_cAccountNumberAccountSourceAccount 表中的列。当端口处理与此结构匹配的 XML 文件时,它会自动将来自该 XML 的值插入到 Account 表中。当端口查询 Account 表时,它会输出与此结构匹配的 XML。

批处理输入

批处理输出

子表

子表 XML

插入父表和子表时,输入映射 XML 结构将是多层的。以下 XML 是通过外键关联的两个表的示例输入映射:
在上面的例子中,Account 是父表,AccountPartner 是子表。当 端口处理匹配此结构的输入 XML 文件时,它会更新这两个表并确保链接两条记录的键相同。

使用 ref 属性

子表中的某些列标有 ref 标记。此标记表示这些列对应于父表中的主键。在对父表进行插入之后,在对子表进行插入之前,端口会在父表中查询它刚刚插入的记录的主键。然后,端口在插入子表时使用此值。 当父表的主键由 生成时,这很有用。在这种情况下,此列不会作为输入 XML 传入,因此端口在将记录插入到父表中之前不知道该列的值。 在 XML 模型中,ref 属性表示可以稍后引用列,或者应该从映射中的另一列读取列的值。为了引用由 生成的列的值,列元素应包含一个设置为保留值 LAST_INSERT_IDref 属性:
这表明 id 值将在插入后检索,并且可以在以后引用(通常在子表中)。要稍后引用此值,请将 ref 元素设置为相关列的名称:
在上面的例子中,id 是父表中主键的名称,也是子表中某列的名称。ref 语法指示端口在插入后从父表中检索 id,然后将检索到的值用作子表中的 id 列。

从子表中选择

只处理新的或更改的记录

使用最后修改列

使用自定义列

预处理和后处理查询

在 Upsert 映射中

在 UPSERT 映射中,可以发出在所有记录被 UPSERT 到表中之前或之后自动执行的查询。 要配置此功能,首先单击 Upsert 配置 窗格中的 </> 代码 打开的文本编辑器允许编辑数据表映射的高级功能。文本可能如下所示:
如要在任何列被添加到表之前或之后触发请求,定义一个具有以下属性的节点:
  • requireInput:设置为 false。此属性值指示端口即使输入文件中没有任何匹配的输入元素也发出查询。
  • insertQuery:包含要在 UPSERT 查询之前或之后执行的语句。
  • table(可选):设置为要使用额外查询定位的表的名称。(在下面的示例中,表名称是 updateTable。)如果在映射的根级别发出查询(即,作为 <Items> 元素的子元素),此属性不是必需的。如果将查询作为另一个表的子项发出,设置 table 属性可确保查询与该表的列区分开来。
根据你希望它执行的时间,将新定义的元素放在 UPSERT 查询之前或之后。 在下面的例子中,<runFirst> 会在任何 UPSERT 请求之前对表运行 EXEC [dbo.FlushTemp]
在下面的例子中,<runLast> 会在所有 UPSERT 请求完成后对表运行 EXEC [dbo].[CommitTemp]
例子中的元素名称(runFirstrunLast)都是占位符,你可以随意自选。
UPSERT 映射中的预处理和后处理查询不接受查询中未硬编码的输入元素,并且它们也不会生成输出数据。

在 Select 映射中

在 Select 映射中,可以发出在对目标表发出查询之前或之后自动执行的查询。要配置此功能,首先单击 Select 配置 窗格中的 </> 代码 打开的文本编辑器允许编辑数据表映射的高级功能。 如要在任何列被添加到表之前或之后触发请求,定义一个具有以下属性的节点:
  • outputResult:设置为 false。此属性值指示端口不将查询的任何数据作为结果返回到输出文件中。
  • selectQuery:包含要在 SELECT 查询之前或之后执行的语句。
  • table(可选):设置为要使用额外查询定位的表的名称。(在下面的示例中,表名称是 selectTable。)如果在映射的根级别发出查询(即,作为 <Items> 元素的子元素),此属性不是必需的。如果将查询作为另一个表的子项发出,设置 table 属性可确保查询与该表的列区分开来。
根据你希望它执行的时间,将新定义的元素放在 SELECT 查询之前或之后。 在下面的例子中,<runFirst> 会在对表发出 SELECT 查询之前运行 EXEC [dbo].[prepTable]
在下面的例子中,<runLast> 会在对表发出 SELECT 查询及任何子查询之后运行 EXEC [dbo].[cleanTable]
例子中的元素名称(runFirstrunLast)都是占位符,你可以随意自选。
SELECT 映射中的预处理和后处理查询不接受查询中未硬编码的输入元素。

XML 属性

表属性

allColumns

insertQuery

outputResult

processChangesOnly

requireInput

selectQuery

table

upsertQuery

列属性

aggregate

column

id

在选择(Select)映射中,此属性使用 Id 标记对列值进行标记,随后可以在子查询中使用语法 ${#ID} 引用该标记。当子查询中需要列值,且多个表中的匹配列名可能导致选择歧义时,这非常有用。

key

ref

在更新/插入(Upsert)映射中,此属性用于向数据库提供无法仅从输入 XML 中确定的更新/插入值。这最常用于父子关系中以确定数据库生成的主键,或者用于一个表引用子表上的外键。有关更多信息,请参阅 使用 ref 属性

timeCheck

type

updateValue