加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer中merge关键字使用

发布时间:2020-12-12 12:43:46 所属栏目:MsSql教程 来源:网络整理
导读:? ? Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进

? ? 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读