合併
Merge 前置詞可新增至指令碼中的任何 LOAD 或 SELECT 陳述式,以指定載入的表格應合併至另一個表格中。這也能指定應在部分載入中執行此陳述式。
一般使用案例是當您載入變更記錄並想要用來將 inserts、updates 和 deletes 套用至現有表格時。
語法:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
在一般 (非部分) 載入期間,Merge LOAD 結構將作為一般 Load 陳述式運作,但具有移除較舊的過時記錄和標記要刪除的記錄等其他功能。LOAD 陳述式的第一個欄位必須保留關於操作的資訊:Insert、Update 或 Delete。
對於每個載入的記錄,將會比較記錄識別碼與先前載入的記錄,並且只會保留最新記錄 (根據序號)。若最新記錄標記了 Delete,則不會保留任何記錄。
若使用 Concatenate 前置詞,或者若已存在具有相同欄位集的表格,則這將會是要修改的相關表格。否則,Merge LOAD 結構的結果將會儲存在新的表格中。
若使用 Concatenate 前置詞,相較於作為輸入到 Merge 所使用的變更記錄,產生的表格可能會有更多欄位。
部分載入將會進行相同事項作為完整載入。唯一的差異是 Merge LOAD 結構永遠不會建立新的表格。透過上次要修改的指令碼執行,永遠存在相關的表格。
若載入的變更記錄是累積記錄,亦即其中包含已載入的變更,則參數 SequenceNoVar 可用於 Where 子句,以限制輸入資料量。然後,可以讓 Merge LOAD 僅載入欄位 SequenceNoField 大於 SequenceNoVar 的記錄。完成後,Merge LOAD 會以見於 SequenceNoField 欄位中的最大值將新的值指派至 SequenceNoVar。
引數:
引數 | 描述 |
---|---|
only | 選用的限定詞,表示只應在部分載入期間執行該陳述式。在一般 (非部分) 載入期間則應忽略該陳述式。 |
SequenceNoField | 包含時間戳記或定義操作順序之序號的欄位名稱。 |
SequenceNoVar |
獲得指派合併表格的 SequenceNoField 最大值的變數名稱。 |
ListOfKeys | 以逗號分隔的欄位名稱清單,指定主要金鑰。 |
operation | LOAD 陳述式的第一個欄位必須包含操作:Insert、Update 或 Delete。也接受 ‘i’、‘u’ 和 ‘d’。 |