SQL Server 中Merge 的使用,sqlmerge
很多人都知道ORACLE中有Merge關鍵字,其實SQL Server從2008版本開始也支援Merge了。
從而也可以像ORACLE一樣在一條SQL語句中同時進行Update、Insert、Delete操作。
下面來一個簡單的例子,直接上代碼了,
數據準備:
IF OBJECT_ID('TestA','U') IS NOT NULLDROP TABLE TestAGOIF OBJECT_ID('TestB','U') IS NOT NULLDROP TABLE TestBGOCREATE TABLE TestA(ID INT,Title NVARCHAR(200))GOCREATE TABLE TestB(ID INT,Title NVARCHAR(200))GOINSERT INTO TestA(ID,Title) VALUES (1,N'A'),(2,N'B'),(3,N'C'),(4,N'D'),(5,N'E')GOINSERT INTO TestB(ID,Title) VALUES (1,N'一'),(3,N'三'),(5,N'五'),(7,N'七'),(9,N'九')GO
現在的需求是,用TestB去更新TestA,ID相同的Update,ID不同的進行Insert
常規的實現方法是分兩步走:
UPDATE aSET a.Title = b.TitleFROM TestA aINNER JOIN TestB b ON a.ID = b.ID;INSERT INTO TestA(ID,Title)SELECT a.ID,a.TitleFROM TestB aWHERE NOT EXISTS(SELECT * FROM TestA WHERE ID = a.ID);
有了Merge,則可以一句話搞定,而且效率還很高:
MERGE INTO TestA AS aUSING TestB AS bON (a.ID = b.ID)WHEN MATCHEDTHEN UPDATE SET a.Title = b.TitleWHEN NOT MATCHED BY TARGETTHEN INSERT(ID,Title) VALUES(b.ID,b.Title);
關於Merge的更多使用,還是請參考MSDN: 參考1、參考2