惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
WordPress大学
WordPress大学
U
Unit 42
I
InfoQ
A
About on SuperTechFans
宝玉的分享
宝玉的分享
J
Java Code Geeks
博客园 - 司徒正美
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
G
Google Developers Blog
人人都是产品经理
人人都是产品经理
小众软件
小众软件
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
腾讯CDC
Recent Announcements
Recent Announcements

博客园 - billqian

Asp.net core 将[Authorize]授权属性应用于所有Controller .NET core 访问SharePoint Online 树莓派上跑.NET的segment fault错误 WiFi、ZigBee、BLE用哪个? SQL Server 的字段不为NULL时唯一 Gnucash数据库结构 禁止使用的极限用语 Git 操作指南 Excel VBA保护工作表 获取SQL Server数据库中的表和字段描述 html文件中jquery与velocity变量中的$冲突的解决方法 云计算知识 通俗理解篇 SharePoint 项目的死法(三) SharePoint 项目的死法(二) SharePoint 项目的死法(一) 独立安装SharePoint 2013碰到的"SDDL"问题及解决方法 解决创建SharePoint网站的时候使用IIS标头错误的问题 解析互联网的产品精神(转) 普华永道、IBM、麦肯锡、埃森哲 (转)
sql server中的merge
billqian · 2016-01-25 · via 博客园 - billqian

http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html

简介

    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关键字的一些限制

  •     使用Merge关键字只能更新一个表
  •     源表中不能有重复的记录

小结

    本文简单说明了Merge关键的字的使用。如果你使用的是SQL Server 2008之后的版本,在面对一些比如库存结账之类的业务时,放弃IF…ELSE和手写UPDATE,Insert吧,使用Merge关键字可以使这类操作更加轻松愉悦。