SQL Server 2008 引入全新的 MERGE 陳述式,專為合併兩個資料集而設計。開發人員過去若要根據來源資料表對目標資料表執行插入、更新、刪除等同步操作,往往需撰寫多條 SQL 敘述並維護大量重複邏輯,不僅繁瑣且易出錯。現在,透過 MERGE 陳述式,這些複雜操作可在單一指令中完成。
傳統上,資料同步需分三步驟:
此過程不僅代碼冗長,還可能因邏輯疏漏導致微妙錯誤。
Bob Beauchemin 提供了經典範例:
merge [target] t
using [source] s on t.id = s.id
when matched then update t.name = s.name, t.age = s.age -- use "rowset1"
when not matched then insert values(id,name,age) -- use "rowset2"
when source not matched then delete; -- use "rowset3"
操作邏輯由 JOIN 結果決定:目標與來源表有匹配列則更新,無匹配則插入或刪除,確保兩表資料一致。
MERGE 最大亮點在於更新操作的確定性。傳統 UPDATE 配合 JOIN 時,若多筆來源列匹配同一目標列,無法預測採用哪筆資料。MERGE 若偵測到多重匹配,會直接拋出錯誤,提醒開發者 JOIN 條件不夠明確,避免資料不一致風險。
MERGE 陳述式大幅簡化資料同步開發,提升代碼可讀性與維護性,是 SQL Server 2008 重要的 T-SQL 增強功能之一。