SQL之merge into 批量更新数据 sql数据同步 基于源表对目标表做Insert,Update,Delete操作

转载 2013年12月05日 18:19:02

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

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

   

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

     2

     图2.一个简单的Merge语句

  

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

     3

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

 

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

     4

     图4.最后目标表的结果

 

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

    5

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

 

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

   6

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

 

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

   7

    图7.仅仅插入的Merge语句

 

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

   8

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

 

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

    9

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

使用MERGE语句同步表

先建好测试环境: USE TEMPDB GO IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1 IF OBJECT_ID('T2') IS NOT NU...
  • MSSQL_DBA
  • MSSQL_DBA
  • 2014年08月27日 13:06
  • 1156

SQL SERVER中使用Merge进行批量操作

在.net开发过程中,经常会和数据库打交道。微软的产品包里,SQL SERVER便是一个强大的数据库管理系统(DBS)。我们编写的.net程序怎么和DBS进行交互呢?笔者最常用的便是ado.net组件...
  • u013346423
  • u013346423
  • 2017年01月06日 20:04
  • 662

.NET 数据同步批量操作,高效率方式

SqlDataAdapter 高效率插入更新
  • haojuntu
  • haojuntu
  • 2016年11月30日 13:14
  • 368

关于数据同步的几种实现

关于数据同步的几种实现 概述 关于数据同步主要有两个层面的同步,一是通过后台程序编码实现数据同步,二是直接作用于数据库,在数据库层面实现数据的同步。通过程序编码实现数据同步,其主要的实现思路很容易理解...
  • xuemoyao
  • xuemoyao
  • 2013年11月04日 09:15
  • 68694

SQL Server的Merge —— 一步实现 insert,update,delete

USE tempdb GO IF OBJECT_ID('SourceTable') IS NOT NULL DROP TABLE SourceTable IF OBJECT_ID('TargetTab...
  • yenange
  • yenange
  • 2016年09月29日 16:46
  • 843

MERGE语句用来合并UPDATE和INSERT语句,一张表的大数据操作,要同时进行增删改,提高性能

该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。 1,in...
  • JesseCary
  • JesseCary
  • 2017年03月06日 20:44
  • 1352

jdbc 批量操作数据库(插入、更新)

package jdbc.json; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepa...
  • shuzhupeng
  • shuzhupeng
  • 2016年07月04日 15:39
  • 5199

基于MyBatis的批量插入更新实现

我的问题:如何在MyBatis下实现批量新增和更新的操作? 遇到的困惑: 1、MyBatis不支持在XML配置的SQL中带有分号“;”; 2、因为第1点原因,所以考虑如何在Oracle下通过一条语...
  • blue225
  • blue225
  • 2017年03月12日 09:34
  • 2449

在SQL Server中使用merge同时进行Insert,Update和Delete操作

Using MERGE in SQL Server to insert, update and delete at the same timeWritten By: Arshad Ali -- 3/1...
  • GRANDTREE
  • GRANDTREE
  • 2010年01月12日 10:06
  • 2219

创建INSERT、DELETE、UPDATE 触发器示例 .

触发器是基于一个表创建的,但是可以针对多个表进行操作。所以触发器可以用来对表实施复杂的完整性的约束,当触发器所保存的数据发生改变时,触发器所保存的数据发生改变时,触发器被自动激活,从而防止对数据的不正...
  • u010078133
  • u010078133
  • 2015年03月13日 11:10
  • 2125
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL之merge into 批量更新数据 sql数据同步 基于源表对目标表做Insert,Update,Delete操作
举报原因:
原因补充:

(最多只允许输入30个字)