SQLServer中merge关键字使用

本文介绍 SQL Server 2008 中引入的 MERGE 命令,这是一种强大的 DML 关键字,能够简化数据同步过程。通过一个实例展示了如何使用 MERGE 对两个表进行同步操作,包括插入、更新和删除记录。

    Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。

    需要使用Merge的场景比如:

  •     数据同步
  •     数据转换
  •     基于源表对目标表做Insert,Update,Delete操作


使用Merge关键字的好处

    首先是更加短小精悍的语句,在SQL Server 2008之前没有Merge的时代,基于源表对目标表进行操作需要分别写好几条Insert,Update,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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值