跳轉到主要內容

表格和列

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 命令的效果可能會因目標資料庫型別而異,因此可能會看到更改的行數比預期多,或者根本沒有更改。
##知行之橋工作流程範例