合併示例 - 同步源和目標表
要說明 MERGE 宣告,請考慮以下兩個表 -
-
dbo.Product :此表包含有關該公司當前銷售的產品的資訊
-
dbo.ProductNew :此表包含有關該公司將來銷售的產品的資訊。
以下 T-SQL 將建立並填充這兩個表
IF OBJECT_id(N'dbo.Product',N'U') IS NOT NULL
DROP TABLE dbo.Product
GO
CREATE TABLE dbo.Product (
ProductID INT PRIMARY KEY,
ProductName NVARCHAR(64),
PRICE MONEY
)
IF OBJECT_id(N'dbo.ProductNew',N'U') IS NOT NULL
DROP TABLE dbo.ProductNew
GO
CREATE TABLE dbo.ProductNew (
ProductID INT PRIMARY KEY,
ProductName NVARCHAR(64),
PRICE MONEY
)
INSERT INTO dbo.Product VALUES(1,'IPod',300)
,(2,'IPhone',400)
,(3,'ChromeCast',100)
,(4,'raspberry pi',50)
INSERT INTO dbo.ProductNew VALUES(1,'Asus Notebook',300)
,(2,'Hp Notebook',400)
,(3,'Dell Notebook',100)
,(4,'raspberry pi',50)
現在,假設我們想要將 dbo.Product 目標表與 dbo.ProductNew 表同步。以下是此任務的標準:
-
存在於 dbo.ProductNew 源表和 dbo.Product 目標表中的產品將在 dbo.Product 目標表中使用新的新產品進行更新。
-
dbo.Product 目標表中不存在的 dbo.ProductNew 源表中的任何產品都將插入到 dbo.Product 目標表中。
-
必須從 dbo.Product 目標表中刪除 dbo.Product 目標表中不存在於 dbo.ProductNew 源表中的任何產品。以下是執行此任務的 MERGE 語句。
MERGE dbo.Product AS SourceTbl
USING dbo.ProductNew AS TargetTbl ON (SourceTbl.ProductID = TargetTbl.ProductID)
WHEN MATCHED
AND SourceTbl.ProductName <> TargetTbl.ProductName
OR SourceTbl.Price <> TargetTbl.Price
THEN UPDATE SET SourceTbl.ProductName = TargetTbl.ProductName,
SourceTbl.Price = TargetTbl.Price
WHEN NOT MATCHED
THEN INSERT (ProductID, ProductName, Price)
VALUES (TargetTbl.ProductID, TargetTbl.ProductName, TargetTbl.Price)
WHEN NOT MATCHED BY SOURCE
THEN DELETE
OUTPUT $action, INSERTED.*, DELETED.*;
注意:分號必須出現在 MERGE 語句的末尾。 https://i.stack.imgur.com/GULoi.jpg