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语句

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
  • 457

merge更新或插入同一张表

一段业务逻辑,需要先判断一条记录在数据库中是否有存在,若存在则更新该记录,若不存在则插入记录。 应用之前的做法是: 1、先用条件判断记录在数据库中的个数。 2.1、若count(*)>0,则执行...
  • bisal
  • bisal
  • 2014年07月28日 18:54
  • 6570

企业库是如何调用存储过程的

企业库  第一步、添加程序集引用 需要在项目中添加对下列程序集的引用 Microsoft.Practices.EnterpriseLibrary.Common.dll Microsoft.Pr...
  • X_X_OO
  • X_X_OO
  • 2016年09月05日 20:36
  • 377

关于ClickOnce的问答:请问ClickOnce的客户端安装路径可以修改吗?

问题 0 登录进行投票 请问ClickOnce的客户端安装路径可以修改吗?                    我很希...

3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的区别,sql文件导入

1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert up...

Merge into: Oracle中用一条SQL语句直接进行Insert/Update的操作

动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作。 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存...
  • needle2
  • needle2
  • 2012年07月03日 15:16
  • 4982

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

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

SQL Server--OUTPUT及OUTPUT...INTO... 在 INSERT、UPDATE 或 DELETE的用法

在INSERT、UPDATE、DELETE语句中使用OUTPUT得到语句影响的每行信息,今天我们来学习这个语法。1、OUTPUT_CLAUSE定义(语法参Transact-SQL 语法约定): ::=...
  • fan158
  • fan158
  • 2011年03月19日 23:14
  • 3670

如何对SQL Server中的XML数据进行insert、update、delete

SQL Server 2005/2008增加了对XML数据的支持,同时也新增了几种操作XML的方法,本文主要以SQL Server 2008为例介绍如何对XML数据进行insert、update、de...

SQL——处理数据(INSERT、DELETE、UPDATE)

1.SQL语句的分类 数据操作语句:DML语句(Data Manipulation Language),包括insert、update、delete。 数据查询语句:DQL语句(Data Query ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL之merge into 批量更新数据 sql数据同步 基于源表对目标表做Insert,Update,Delete操作
举报原因:
原因补充:

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