跳轉到主要內容
Upsert 操作插入或更新 CData 資料。預設情況下,如果 CData 中已存在記錄,則使用輸入提供的值對 CData 中的現有資料執行更新。有關詳細資訊,請參閱 UPSERT 查詢行為。
CData 端口已棄用。與其他資料庫端口不同,它不支援對映模式,因此 Upsert 操作仍需要使用 XML Map 端口來對映列。

表和列

如果為 CData 端口選擇 Upsert,則必須從 CData 中選擇一個(或多個)目標表。單擊表格面板上方的新增按鈕。 Upsert 配置面板,顯示帶有新增按鈕的表格部分。 一個模態框出現並列出所有可用的表格。選擇所需的表並單擊新增。 新增表模態框列出了可用的表,其中選中了 Orders 表,底部有新增按鈕。 選定的表出現在表格面板下,表中的列出現在列面板下。端口會自動檢測具有特殊相關性的值(例如主索引鍵和外部索引鍵)並相應地標記它們。 選中 Orders 表的 Upsert 配置面板,列面板中 Id 列的 UPSERT 開關設定為 ON,UPSERT By 欄位設定為 Id。 預設情況下,所有列都被選中以包含在 CData 端口的操作中。你可以透過取消選中來刪除單個列。
你可以透過單擊新增並重複此過程來選擇更多表。有關詳細資訊,請參閱子表。

UPSERT 查詢行為

預設情況下,列對映中的 UPSERT 滑塊設定為 ON。這意味著 UPSERT 對映在 INSERT 記錄(如果沒有匹配記錄)或 UPDATE 記錄(如果記錄已存在)之前確定記錄是否存在於目標中。 Upsert 配置面板,Id 列上的 UPSERT ON 開關被醒目顯示。 用於確定該值的查詢由以下部分中描述的邏輯確定。

UPSERT 滑塊設定為開啟

當滑塊設定為 ON 時,查詢行為會根據在 UPSERT By 和執行此查詢… 選項按鈕中選擇的內容而變化。

按 ID 執行 UPSERT

如果輸入 XML 中存在鍵列,則會向資料庫發出查詢以確定是否存在具有匹配鍵的任何記錄:
匹配結果更新;沒有匹配結果導致插入。 如果輸入 XML 中不存在鍵列,則始終插入記錄:

按非鍵列執行 UPSERT

透過選擇表的主索引鍵,向資料庫發出查詢,以確定是否存在所選 UPSERT By 列包含匹配值的記錄:
SELECT 查詢始終以 SELECT 語句中表的鍵列為目標。如果匹配成功,則輸入 XML 中的資料將更新到資料來源中。如果沒有匹配,則插入記錄。
如果輸入中未指定所選的 UPSERT By 列,則查詢將與 NULL 值一起使用,如以下查詢所示:

使用自定義查詢

還可以編寫自定義查詢來選擇 UPSERT 鍵。此選項允許使用比單列匹配更複雜的邏輯來執行查詢。考慮以下查詢:
在此範例中,必須選擇表的鍵列,以便為 UPDATE 提供足夠的條件。@OrderID 語法用於引用匹配輸入 XML 中的值。還可以使用靜態值:'Active' 周圍的引號表示該子句使用靜態值。 同樣,鍵列的成功匹配用於形成更新請求。如果沒有匹配,則插入記錄。
當對資料庫插入的行為有疑問時,請檢視 UPSERT 嘗試的 .log 檔案:用於指導該行為的邏輯的完整細分將傳送到日誌檔案。

UPSERT 滑塊設定為關閉

當滑塊設定為 OFF 時,端口只需將所有查詢插入資料庫即可。檢查輸入對映的程式碼檢視顯示表的 action 屬性是 insert:
無論主索引鍵是否存在,向表發出的所有查詢都被視為插入。要根據表更新所有收到的記錄,可以將此操作關鍵字設定為 update,如以下程式碼片段所示:
當操作定義為 update 時,應用程式期望表的鍵列(例如 Id)存在。如果未提供鍵列,則 UPDATE 命令的效果可能會因目標資料庫型別而異,因此可能會看到更改的行數比預期多,或者根本沒有更改。

知行之橋流程範例

為 Upsert 配置的 CData 端口選擇表格和列後,將端口放置在知行之橋工作流程的末尾。下面的螢幕截圖描述了一個範例流程,其中包含一個 File 端口、一個 CSV 端口、一個 XML Map 端口,以及末尾的一個 CData Upsert 端口: 知行之橋範例工作流程,依次顯示四個端口:File_Receive、CSV1、XMLMap1 和 CData_Upsert。 此範例工作流程中的資料透過以下步驟:
  1. File 端口從磁碟提取 CSV 檔案並將其放入流程中。
  2. CSV1 端口將 CSV 檔案轉換為 XML。
  3. 此資料作為來源檔案傳遞給 XML_Map 端口,後者對映到源樹狀結構中。
  4. 來自 CData_Upsert 端口的資料作為目的檔案傳遞給 XML_Map 端口,後者對映到目標樹狀結構。XML Map 端口的對映介面,左側為源樹(source.xml),右側為目標樹(destination.xml),元素之間尚未建立對映。
  5. XML_Map 端口嘗試自動將源元素對映到具有相同名稱的目標元素。你可以手動更改這些對映,並透過將元素從源拖到目標來填充空白對映。XML Map 端口的對映介面,源樹中的元素已對映到目標樹,以曲線連接 first 到 firstName、last 到 lastName 等欄位。
  6. CData_Upsert 端口根據對映執行 Upsert 並將結果資料傳遞給 CData。