SQL Server 中Merge 的使用,sqlmerge

來源:互聯網
上載者:User

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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.