Skip to main content

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