merge:
在2008后被引入,它能将insert,Update,delete 简单并为一句,
根据与源表连接的结果,对目标表进行插入,更新和删除操作
例如:Merge是关于对于两个表之间进行操作的
CREATE TABLE SourceTable ( id INT, [desc] NVARCHAR(20) ) CREATE TABLE TargetTable ( id INT, [desc] NVARCHAR(20) ) INSERT INTO SourceTable(id,[desc]) VALUES( 1,'描述1') INSERT INTO SourceTable(id,[desc]) VALUES( 2,'描述2') INSERT INTO SourceTable(id,[desc]) VALUES( 3,'描述3') INSERT INTO SourceTable(id,[desc]) VALUES( 4,'描述4') INSERT INTO TargetTable(id,[desc]) VALUES( 1,'在源表存在,将会被更新') INSERT INTO TargetTable(id,[desc]) VALUES( 2,'在源表存在,将会被更新') INSERT INTO TargetTable(id,[desc]) VALUES( 5,'在源表不存在,将会被删除') INSERT INTO TargetTable(id,[desc]) VALUES( 6,'在源表存在,将会被删除') SELECT * from TargetTable SELECT * from SourceTable MERGE INTO TargetTable AS T USING SourceTable AS S ON t.id = s.id WHEN matched --当两个Id相等的时候,目标表Id为1,2的数据将被更新 THEN UPDATE SET t.[desc] = s.[desc] WHEN NOT matched --目标表中没有,原表有,则插入相关数据 THEN INSERT VALUES(s.id,s.[desc]) WHEN NOT matched BY source--目标表中存在,原表中不存在,则删除 THEN delete ;
注意:merge语句结束后必须以 ;结尾,否则报错