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

SQL Server 2008 T-SQL MERGE 語法詳解與實戰範例

     編輯:關於SqlServer

MERGE 語法是 SQL Server 2008 引入的強大功能,它將插入、更新、刪除三種操作整合在單一陳述式中。根據來源表與目標表的聯接結果,MERGE 可以同步兩張表的資料:當符合條件時更新,不符合時插入,來源表中不存在的目標資料則刪除。這對於資料倉儲的 ETL 流程、資料同步等場景極為實用。

基本語法結構

MERGE 目標表 AS 目標別名
USING 來源表 AS 來源別名
ON 聯接條件
WHEN MATCHED THEN UPDATE SET 目標欄位 = 來源欄位
WHEN NOT MATCHED THEN INSERT (欄位列表) VALUES (來源欄位列表)
WHEN NOT MATCHED BY SOURCE THEN DELETE;

實戰範例:訂單表同步

以下範例示範如何使用 MERGE 將 Orders2 的變更同步到 Orders 表:

USE tempdb;
GO

-- 建立目標訂單表
CREATE TABLE Orders (OrderID INT, CustomerID NCHAR(5));
GO

-- 插入初始資料
INSERT INTO Orders VALUES (1, N'AAAAA');
INSERT INTO Orders VALUES (2, N'BBBBB');
GO

-- 建立來源表(僅複製 OrderID=1 的資料)
SELECT * INTO Orders2 FROM Orders WHERE OrderID = 1;
GO

-- 修改來源表資料
UPDATE Orders2 SET CustomerID = N'DDDDD';

-- 執行 MERGE 同步
MERGE Orders o
USING Orders2 o2 ON o2.OrderID = o.OrderID
WHEN MATCHED THEN UPDATE SET o.CustomerID = o2.CustomerID
WHEN NOT MATCHED THEN INSERT VALUES (o2.OrderID, o2.CustomerID)
WHEN NOT MATCHED BY SOURCE THEN DELETE;

執行後,Orders 表將反映 Orders2 的最新狀態:OrderID=1 的客戶代碼更新為 DDDDD,OrderID=2 因來源表無對應資料而被刪除。

優勢與注意事項

  • 單一陳述式完成多種操作,減少往返網路延遲。
  • 確保聯接條件唯一,避免多重匹配導致錯誤。
  • 搭配 OUTPUT 子句可記錄變更明細,方便稽核。

MERGE 是現代化 T-SQL 開發的利器,善用它能大幅簡化資料同步邏輯。

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