Sql Server Merge 关键字 一个条语句实现增删改查

您所在的位置:网站首页 clickhouse增删改查sql Sql Server Merge 关键字 一个条语句实现增删改查

Sql Server Merge 关键字 一个条语句实现增删改查

#Sql Server Merge 关键字 一个条语句实现增删改查| 来源: 网络整理| 查看: 265

  简介

Merge关键字在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。

可以想象出,需要使用Merge的场景比如:

数据同步 数据转换 基于源表对目标表做Insert,Update,Delete操作

MERGE语句的基本语法:

MERGE [TOP ] [into] 目标表 USING 源表 ON 匹配条件 WHEN MATCHED [AND 其他条件] THEN [UPDATE|INSERT|DELETE] 语句 WHEN NOT MATCHED [AND 其他条件] THEN [UPDATE|INSERT|DELETE] 语句 WHEN NOT MATCHED BY SOURCE [AND 其他条件] --SOURCE 是指USING 后面的表 THEN [UPDATE|INSERT|DELETE] 语句 OUTPUT $ACTION AS [Action], --OUTPUT 语句 Merge操作完成后,将所变动的语句进行输出 Inserted.SPDID as [新增的], Updated.SPDID as [更新的], Deleted.SPDID as [删除的]

示例 使用Merge 更新,插入和删除

MERGE INTO [SalesPath_Forecast] a USING @TblDataUpdate b--临时表 ON (b.SPDID = a.SPDID) WHEN MATCHED THEN UPDATE SET a.[ForecastAmount] = b.[ForecastAmount] , a.[RiskAmount] = b.[RiskAmount] , a.[UpsideAmount] = b.[UpsideAmount] , a.[BridgeAmount] = b.[BridgeAmount], a.[RootCauseID] = b.[RootCauseID], a.[Remark] = b.[Remark] WHEN NOT MATCHED THEN INSERT ([SPDID],….略) VALUES (newid(),….略)WHEN NOT MATCHED BY SOURCE --SOURCE 是指USING 后面的表,在原表中存在目标表中不存在 ,直译: 没有根源表匹配上 THEN DELETE OUTPUT $ACTION AS [Action], --OUTPUT 语句 Merge操作完成后,将所变动的语句进行输出 Inserted.SPDID as [新增的], Updated.SPDID as [更新的], Deleted.SPDID as [删除的]; 上面的Merge关键字后面使用了多个WHEN…THEN语句,而这个语句是可选的.也可以仅仅新增或是仅仅删除 Merge关键字的一些限制 使用Merge关键字只能更新一个表 源表中不能有重复的记录 小结

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3