首页 > 代码库 > SQL Server 中Merge 的使用
SQL Server 中Merge 的使用
很多人都知道ORACLE中有Merge關鍵字,其實SQL Server從2008版本開始也支持Merge了。
從而也可以像ORACLE一樣在一條SQL語句中同時進行Update、Insert、Delete操作。
下面來一個簡單的例子,直接上代碼了,
數量準備:
IF OBJECT_ID('TestA','U') IS NOT NULL DROP TABLE TestA GO IF OBJECT_ID('TestB','U') IS NOT NULL DROP TABLE TestB GO CREATE TABLE TestA(ID INT,Title NVARCHAR(200)) GO CREATE TABLE TestB(ID INT,Title NVARCHAR(200)) GO INSERT INTO TestA(ID,Title) VALUES (1,N'A'),(2,N'B'),(3,N'C'),(4,N'D'),(5,N'E') GO INSERT INTO TestB(ID,Title) VALUES (1,N'一'),(3,N'三'),(5,N'五'),(7,N'七'),(9,N'九') GO現在的需求是,用TestB去更新TestA,ID相同的Update,ID不同的進行Insert
常規的實現方法是分兩步走:
UPDATE a SET a.Title = b.Title FROM TestA a INNER JOIN TestB b ON a.ID = b.ID; INSERT INTO TestA(ID,Title) SELECT a.ID,a.Title FROM TestB a WHERE NOT EXISTS(SELECT * FROM TestA WHERE ID = a.ID);有了Merge,則可以一句話搞定,而且效率還很高:
MERGE INTO TestA AS a USING TestB AS b ON (a.ID = b.ID) WHEN MATCHED THEN UPDATE SET a.Title = b.Title WHEN NOT MATCHED BY TARGET THEN INSERT(ID,Title) VALUES(b.ID,b.Title);
關於Merge的更多使用,還是請參考MSDN: 參考1、參考2
SQL Server 中Merge 的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。