SQL Server 2008 引入 MERGE 陳述式,用於合併兩個資料集。根據來源資料表對目標資料表執行確定性的插入、更新、刪除,開發者以單一命令完成複雜同步操作。
需維護大量重複邏輯,易產生微妙錯誤。
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 結果決定:匹配則更新,不匹配則插入或刪除,保持目標與來源一致。
標準 UPDATE 配合 JOIN 時,多筆來源列匹配同一目標列會導致不可預測的更新結果。MERGE 若偵測到多重匹配,直接拋出錯誤,提醒開發者 JOIN 條件不夠明確,確保更新確定性。
MERGE 陳述式將多步驟同步邏輯合併為單一指令,並提供確定性更新保證,是 SQL Server 2008 重要的 T-SQL 增強功能。