簡介
Merge關鍵字是一個神奇的DML關鍵字。它在SQL Server 2008被引入,它能将Insert,Update,Delete簡單的并為一句。MSDN對于Merge的解釋非常的短小精悍:”根據與源表聯接的結果,對目标表執行插入、更新或删除操作。例如,根據在另一個表中找到的差異在一個表中插入、更新或删除行,可以對兩個表進行同步。”,通過這個描述,我們可以看出Merge是關于對于兩個表之間的資料進行操作的。
可以想象出,需要使用Merge的場景比如:
資料同步
資料轉換
基于源表對目标表做Insert,Update,Delete操作
MERGE INTO文法如下:
MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
UPDATE
SET col1 = col1_val1,
col2 = col2_val2
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);
其中,table_name 指的是更新的表,using()裡邊的指的是資料來源表/視圖/子查詢結果集,condition指的是連接配接條件,如果滿足連接配接條件,set 字段1=值1,字段2=值2..
執行個體如下:
MERGE INTO gdps_memberbank c
USING dual
ON (c.cltno= #cltno#)
WHEN MATCHED THEN
UPDATE
SET c.mb_flag=mb_flag
WHERE c.cltno=#cltno#
WHEN NOT MATCHED THEN
INSERT(CLTNO,MB_FLAG)
VALUES (#cltno#,#mb_flag#)
在gdp_memberbank目标表和dual源表中查詢cltNo是否用相同字段的資訊,有的話執行update,沒有的話執行insert;