SQL之mergeinto批量更新数据
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所⽰。批量更新sql语句
图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语句
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论