如何使用SQL Server中的合并功能
Merge 关键字是一个神奇的 DML 关键字。它是在SQL Server 2008中引入的,它可以简单地将Insert、Update和Delete组合成一句话。 MSDN对Merge的解释非常简短:“根据与源表的连接结果,对目标表执行插入、更新或删除操作。
MERGE目标表
< p>USING源表ON匹配条件
WHEN MATCHED THEN
语句
WHEN NOT MATCHED THEN
语句;
最后一条语句中的分号不能省略,源表可以是表,也可以是子查询语句
WHEN NOT MATCHED BY TARGET
< p>表示目标表不匹配,BY TARGET是默认的,所以上面我们直接用WHEN NOT MATCHED THENWHEN NOT MATCHED BY SOURCE
表示源表不匹配,即源表存在于目标表表中不存在的情况。
主要用法:
merge不能多次更新同一行,也不能同时更新删除同一行
当源表和目标表不匹配时:如果数据在源表中而目标表中没有,则插入数据。如果源表中没有数据,但目标表中有数据,则执行更新或删除数据操作。当源表和目标表数据不匹配时,执行插入操作。当表匹配时:匹配时执行更新操作或删除操作 该子句可以有两个。当有两个时,第一个子句必须是whenmatchedandcondition并且两个匹配子句中只有一个会被执行,并且两个子句都必须是与源不匹配时的更新和删除操作,与上面类似
将icr_codemap_bak合并为ausing icr_codemap as bon a.COLNAME = b.COLNAME and a.ctcode = b.ctcodewhenmatched and b .pbcode <> a.pbcode 然后更新 set a.pbcode= b.pbcode 当不匹配时则插入值(b.colname,b.ctcode,b.pbcode,b.note);
您可以比较和更新字段如果不一致
https://technet.microsoft.com/zh-cn/library/bb510625.aspx 这是MSDN URL
在Merge Matched操作中,只进行UPDATE或 DELETE 语句被允许执行。在合并不匹配操作中,仅允许 INSERT 语句。出现在 Merge 语句中的 Matched 操作只能作为 UPDATE 或 DELETE 语句出现一次,否则将出现以下错误 - An action of type 'WHEN MATCHED' can't在 MERGE 语句的 'UPDATE' 子句中出现多次。 Merge 语句末尾必须包含分号并以 ; 结尾。
ps:用法SQL Server 中的合并使用
执行前:
当匹配且 u.UserId=c.UserId 时,使用图表信息 c 合并到 UserInfo u.UserId=c.UserId 中。 UserName=c.UserName then update set u.lastUpdate=c.LastUpdatewhen notmatch - 不匹配时无法更新(当然不匹配的话也无法更新)然后insert (UserName ,Sex)values( 'ZhangZhao','b');
执行后
Merge和using是一起使用的,特别是在BI数据统计分析中,比如需要分表而不存在的话数据时,必须从父表中删除相应的数据,以保证子表和父表中的数据对应。如果常规做法是运行一个作业,然后通过游标/表值函数/临时表等循环获取数据,然后更新父级,这是效率的浪费。这就是 Merge 派上用场的地方。
以上就是合并功能的使用方法在 SQL Server 中。小编相信有些知识点在我们日常工作中可能会看到或者用到。希望您能从本文中了解更多信息。更多详情请关注行业资讯频道。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何使用SQL Server中的合并功能