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

SqlServer 2008+中Merge的应用

发布时间:2020-12-12 14:43:26 所属栏目:MsSql教程 来源:网络整理
导读:简介 : ? ? ? ? ? SqlServer 2008中新增加了Merge这个DML关键字,msdn对于Merge的解释:根据与源表联结的结果,对目标表执行Insert,Update,Delete操作.例如:根据目标表与源表的差异,在目标表中执行执行Insert,Delete操作,实现两个表的同步. 语法: ? ? ? ? Mergo

简介:

? ? ? ? ? SqlServer 2008中新增加了Merge这个DML关键字,msdn对于Merge的解释:根据与源表联结的结果,对目标表执行Insert,Update,Delete操作.例如:根据目标表与源表的差异,在目标表中执行执行Insert,Delete操作,实现两个表的同步.

语法:

? ? ? ? Mergo Into 目标表 as T

? ? ? ? Using 源表 as S

? ? ? ? ON 匹配条件

? ? ? ? when matched and [其它条件] then

? ? ? ? ?对源表与目标表匹配的项执行的操作

? ? ? ? when not matched [其它条件] then?

? ? ? ? ? ?对源表中存在的,而目标表中不存在的匹配项执行操作

? ? ? ? ?when not matched by source and [其它条件] then

? ? ? ? ? ?对目标表中存在的,而源表中不存在的匹配项执行操作;

? ? ? ? ? 注意事项 1.最后的分号必须有

? ? ? ? ? ? ? ? ? ? ? ? ?2.源表可以是一个具体的表,也可以是一个子查询语句

实例:

? ? ? ??

   --创建源表
   CREATE TABLE Old(ID INT,Des nvarchar(20))
   --创建目标表
   CREATE TABLE New(ID INT,Des nvarchar(20))

   Insert into Old Values(1,'1')
   Insert into Old Values(2,'2') --目标表中不存在的将被插入
   Insert into Old Values(3,'3')

   Insert into New Values(1,'匹配的将被修改')
   Insert into New Values(5,'源表中不存在的将被删除')

   Merge into New AS T
   Using Old as S
   ON T.ID=S.ID
   WHEN MATCHED 
   THEN UPDATE SET T.Des=S.Des
   WHEN NOT MATCHED 
   THEN INSERT VALUES(S.ID,S.Des)
   WHEN NOT MATCHED BY Source 
   THEN DELETE;

此实例实现的目标表和源表的同步.

Mergo还一个强大功能,用Output可以对刚才做的改动输出:

? ? ??

--创建源表
   CREATE TABLE Old(ID INT,S.Des)
   WHEN NOT MATCHED BY Source 
   THEN DELETE;
   output $action as [Action],Inserted.ID AS 插入修改的ID,Inserted.Des as 插入修改的Des,DELETEd.ID AS 修改删除的ID,DELETED.Des as 修改删除的Des;


缺点:

  1. ? ? ? ??使用Merge只能更新操作一个目标表
  2. ? ? ? ? 源表中不能有重复的记录
  3. ? ? ? ? 源表和目标表必须在同一个数据库中
小结: ? ? ? ??SQL Server 2008中Merge关键字的加入使得表同步有一个好的解决方案,但Mergo的功能并不局限于此!

(编辑:李大同)

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

    推荐文章
      热点阅读