Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释很是的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操做。例如,根据在另外一个表中找到的差别在一个表中插入、更新或删除行,能够对两个表进行同步。”,经过这个描述,咱们能够看出Merge是关于对于两个表之间的数据进行操做的。html
能够想象出,须要使用Merge的场景好比:测试
首先是更加短小精悍的语句,在SQL Server 2008以前没有Merge的时代,基于源表对目标表进行操做须要分别写好几条Insert,Update,Delete。而使用Merge,仅仅须要使用一条语句就好。下面咱们来看一个例子。spa
首先创建源表和目标表,并插入相关的数据,如图1所示。htm
图1.建立测试表并插入测试数据blog
下面咱们来写一个简单的Merge语句,如图2所示。get
图2.一个简单的Merge语句同步
所形成的结果如图3所示。基础
图3.Merge语句对于目标表的更新date
最终目标表的结果如图4所示。im
图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关键的字的使用。若是你使用的是SQL Server 2008以后的版本,在面对一些好比库存结帐之类的业务时,放弃IF…ELSE和手写UPDATE,Insert吧,使用Merge关键字可使这类操做更加轻松愉悦。