Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。
需要使用Merge的场景比如:
- 数据同步
- 数据转换
- 基于源表对目标表做Insert,Update,Delete操作
使用Merge关键字的好处
首先是更加短小精悍的语句,在SQL Server 2008之前没有Merge的时代,基于源表对目标表进行操作需要分别写好几条Insert,Update,Delete。而使用Merge,仅仅需要使用一条语句就好。下面我们来看一个例子。
同步两个表的数据,虽然可以写触发器,但是我是读取系统表结构写入到我的表中,因此触发器无法实现。
merge into SysDataTable as T
--目标数据表
using V_TableInfoStruc as S --源数据表是一个视图
on T.TableName= S.TableName and T.FieldName = S.ColName --两个表之间的关系
when matched --在目标表中与源表中都存在,便修改
then update set T. FieldType= S.CType,T.FieldLength=S.Length,T.Sort=S.Sort --更新语句
when not matched --目标表中不存在,在源表中存在,则插入
then insert (ID,TableName,TableChaName,FieldName,FieldChaName,FieldType,FieldChaType,FieldLength,Sort)
VALUES(NEWID(),S.TableName,(case when S.TableNotes Is null then S.TableName else S.TableNotes end),
S.ColName,(case when S.ColDesc Is null or S.ColDesc='' then S.ColName else S.ColDesc end),S.CType,
'',S.Length,S.Sort)
when not matched by source --目标表中存在,源表中不存在,则删除
then DELETE;
以下网址说明的更详细:http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html
本文介绍 SQL Server 2008 中引入的 MERGE 命令,这是一种强大的 DML 关键字,能够简化数据同步过程。通过一个实例展示了如何使用 MERGE 对两个表进行同步操作,包括插入、更新和删除记录。

1万+

被折叠的 条评论
为什么被折叠?



