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


     
    简介

    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关键字可以使这类操作更加轻松愉悦

  • 相关阅读:
    自动化测试项目实战训练【广州8月】
    RFT基础使用手册
    TestComplete自动化测试实战训练【6月11、12号】
    Jubula Eclipse开源功能测试工具
    网络管理自动化测试应用
    IBM RFT自动化测试实战课程
    GUI自动化测试原理剖析—JAVA测试篇
    简易自动化测试设计之(一) 基于RFT的自动化测试层次
    录制,到底给我们带来了什么?
    IBM Rational Functional Tester(RFT) 自动化测试框架ITCL
  • 原文地址:https://www.cnblogs.com/Qbit/p/Sql_Server__Merge.html
Copyright © 2020-2023  润新知