首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server MERGE 陳述式:單一指令完成 UPSERT 與同步

     編輯:關於SqlServer

MERGE 適用場景

  • 資料同步(來源→目標)。
  • ETL 維度表緩慢變化維度 (SCD) 處理。
  • 單一陳述式完成 INSERT/UPDATE/DELETE。

語法結構

MERGE INTO TargetTable AS T
USING SourceTable AS S
ON T.Key = S.Key
WHEN MATCHED THEN
    UPDATE SET T.Col = S.Col
WHEN NOT MATCHED BY TARGET THEN
    INSERT (Key, Col) VALUES (S.Key, S.Col)
WHEN NOT MATCHED BY SOURCE THEN
    DELETE;

實戰範例

來源表 Source、目標表 Target,依 ID 比對:

  • ID 存在且資料不同 → UPDATE。
  • ID 不存在於 Target → INSERT。
  • ID 不存在於 Source → DELETE。

執行後 Target 完整同步 Source 狀態。

優勢與注意事項

  • 單一陳述式原子性,避免多步驟間一致性風險。
  • 需確保 ON 條件欄位有索引,否則全表掃描效能差。
  • SQL Server 2008+ 支援,OUTPUT $action 可記錄實際執行動作。

建立測試表與資料

MERGE 範例腳本

執行後目標表變化

最終目標表結果

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved