Microsoft SQL Server 2008 引入了全新的 MERGE 語句,開發人員僅需一條命令,即可根據來源資料表對目標資料表執行確定性的插入、更新與刪除操作,大幅簡化資料同步邏輯。
在沒有 MERGE 之前,同步兩張資料表需分三步驟:處理新增列、更新現有列、刪除過時列。這不僅產生大量重複程式碼,還容易因邏輯疏漏導致微妙錯誤。
merge [target] t using [source] s on t.id = s.id when matched then update t.name = s.name, t.age = s.age -- 使用 "rowset1" when not matched then insert values(id,name,age) -- 使用 "rowset2" when source not matched then delete; -- 使用 "rowset3"
操作類型由 JOIN 結果決定:匹配則更新,目標無匹配則插入,來源無匹配則刪除,確保兩表數據一致。
標準 UPDATE 配合 JOIN 時,若多筆來源列匹配同一目標列,無法預測採用哪筆資料。MERGE 若偵測到多重匹配,會直接拋出錯誤,強制開發者精確定義 JOIN 條件,確保更新確定性。