使用MERGE方便快捷地更新数据表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_32832727/article/details/54190424

在 SQL Server 2008 中,您可以使用 MERGE 语句,根据与源表联接的结果,对目标表执行插入、更新或删除操作。避免写太多的IF……ELSE语句。

MERGE 语法包括五个主要子句:
MERGE 子句:用于指定作为插入、更新或删除操作目标的表或视图。
USING 子句:用于指定要与目标联接的数据源。
ON 子句:用于指定决定目标与源的匹配位置的联接条件。
WHEN 子句:(WHEN MATCHED、WHEN NOT MATCHED BY TARGET 和 WHEN NOT MATCHED BY SOURCE)基于 ON 子句的结果和在 WHEN 子句中指定的任何其他搜索条件指定所要采取的操作。
OUTPUT 子句:针对插入、更新或删除的目标中的每一行返回一行。

示例:

源表和目标表如下:


根据与源表(Table_Source)联接的结果,对目标表(Table_Target)执行插入、更新或删除操作:

--这是要执行操作的目标表,as指定别名
merge into Table_Target as T
--using后面是用来做数据对比的源表,也可是using (select column1,column2...) as S
using Table_Source as S
--on后面是匹配条件
on T.name=S.stuname
--当数据匹配时,使用源表中的major更新目标表中的class,因为操作的是目标表,所以update、insert、delete后面不用写表名
when matched
	then 
	update set T.class=S.major
--当目标表中不存在,而源表中存在时,执行insert操作,这里的by target可以省略
when not matched by target
	then 
	insert values(S.stuname,S.major)
--当目标表中存在,而源表中不存在时,执行delete操作,这里的by source不能省略
when not matched by source
	then 
	delete;

操作之后的目标表如下:

将上面代码最后的“;”改为output语句执行的话,可以输出刚刚做过变动的数据:

output $action as '动作',
inserted.name as '插入的name',
inserted.class as '插入的class',
deleted.name as '删除的name',
deleted.class as '删除的class';
目标表中数据的变动情况如下:



猜你喜欢

转载自blog.csdn.net/sinat_32832727/article/details/54190424