Merge关键字是一个神奇的DML关键字。它在sql Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。根据与源表联接的结果,对目标表执行插入、更新或删除 *** 作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行 *** 作的。
需要使用Merge的场景比如:
数据同步 数据转换 基于源表对目标表做Insert,Delete *** 作使用Merge关键字的好处
首先是更加短小精悍的语句,在sql Server 2008之前没有Merge的时代,基于源表对目标表进行 *** 作需要分别写好几条Insert,Delete。而使用Merge,仅仅需要使用一条语句就好。下面我们来看一个例子。
同步两个表的数据,虽然可以写触发器,但是我是读取系统表结构写入到我的表中,因此触发器无法实现。
merge into SysDatatable as T --目标数据表
using V_tableInfoStruc as S --源数据表是一个视图
on T.tablename= S.tablename and T.FIEldname = S.Colname --两个表之间的关系
when matched --在目标表中与源表中都存在,便修改
then update set T. FIEldType= S.CType,T.FIEldLength=S.Length,T.sort=S.sort --更新语句
when not matched --目标表中不存在,在源表中存在,则插入
then insert (ID,tablename,tableChaname,FIEldname,FIEldChaname,FIEldType,FIEldChaType,FIEldLength,Sort)
VALUES(NEWID(),S.tablename,(case when S.tableNotes Is null then S.tablename else S.tableNotes end),
S.Colname,(case when S.ColDesc Is null or S.ColDesc='' then S.Colname else S.ColDesc end),S.CType,
'',S.Length,S.sort)
when not matched by source --目标表中存在,源表中不存在,则删除
then DELETE;
以下网址说明的更详细:http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.HTML
总结以上是内存溢出为你收集整理的SQLServer中merge关键字使用全部内容,希望文章能够帮你解决SQLServer中merge关键字使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)