zoukankan      html  css  js  c++  java
  • SQL Server 使用 Merge 关键字进行表数据同步

    简介

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

        可以想象出,需要使用Merge的场景比如:

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

    使用Merge关键字的好处

        首先是更加短小精悍的语句,在SQL Server 2008之前没有Merge的时代,基于源表对目标表进行操作需要分别写好几条Insert,Update,Delete。而使用Merge,仅仅需要使用一条语句就好。下面我们来看一个例子。

        首先建立源表和目标表,并插入相关的数据,如图1所示。

      

         图1.创建测试表并插入测试数据

       

        下面我们来写一个简单的Merge语句,如图2所示。

         

         图2.一个简单的Merge语句

      

         所造成的结果如图3所示。

         

         图3.Merge语句对于目标表的更新

     

         最终目标表的结果如图4所示。

         

         图4.最后目标表的结果

        Merge语句还有一个强大的功能是通过OUTPUT子句,可以将刚刚做过变动的数据进行输出。我们在上面的Merge语句后加入OUTPUT子句,如图5所示。

        

        图5.Merge语句后加上OUTPUT子句

       此时Merge操作完成后,将所变动的语句进行输出,如图6所示。

       

       图6.输出Merge操作产生的数据变更

       当然了,上面的Merge关键字后面使用了多个WHEN…THEN语句,而这个语句是可选的.也可以仅仅新增或是仅仅删除,如图7所示。

       

        图7.仅仅插入的Merge语句

       我们还可以使用TOP关键字限制目标表被操作的行,如图8所示。在图2的语句基础上加上了TOP关键字,我们看到只有两行被更新。

       

        图8.使用TOP关键字的Merge语句

        但仅仅是MATCHED这种限制条件往往不能满足实际需求,我们可以在图7那个语句的基础上加上AND附加上额外的限制条件,如图9所示。

        

    图9.加上了AND限制条件的Merge语句

    Merge关键字的一些限制

    •     使用Merge关键字只能更新一个表
    •     SQLSERVER 2008 以上版本
    •     源表中不能有重复的记录

    微软MSDN的merge解释:

    传送门:https://docs.microsoft.com/zh-cn/sql/t-sql/statements/merge-transact-sql

  • 相关阅读:
    事件委托应用:在父控件中创建子控件,并接收值
    填充树节点
    JAVA Eclipse如何安装Swing
    JAVA Eclipse开发Android如何设置滚动条最大值最小值
    JAVA Eclipse开发Android如何让屏幕保持为竖直或水平状态
    JAVA Eclipse开发Android如何让超出界面的部分自动显示滚动条
    JAVA Eclipse开发Android程序如何自定义图标
    JAVA Eclipse开发Android程序会经常闪退是怎么回事
    JAVA Eclipse的Android文件结构是怎么样的
    JAVA Eclipse的Android的进程和生命周期是什么
  • 原文地址:https://www.cnblogs.com/tweet/p/7574362.html
Copyright © 2011-2022 走看看