本文主要是介绍使用MERGE方便快捷地更新数据表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在 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 matchedthen update set T.class=S.major
--当目标表中不存在,而源表中存在时,执行insert操作,这里的by target可以省略
when not matched by targetthen insert values(S.stuname,S.major)
--当目标表中存在,而源表中不存在时,执行delete操作,这里的by source不能省略
when not matched by sourcethen delete;
操作之后的目标表如下:
将上面代码最后的“;”改为output语句执行的话,可以输出刚刚做过变动的数据:
output $action as '动作',
inserted.name as '插入的name',
inserted.class as '插入的class',
deleted.name as '删除的name',
deleted.class as '删除的class';
目标表中数据的变动情况如下:
这篇关于使用MERGE方便快捷地更新数据表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!