zoukankan      html  css  js  c++  java
  • SQLServer之merge函数用法

    MERGE 目标表
    USING 源表
    ON 匹配条件
    WHEN MATCHED THEN
    语句
    WHEN NOT MATCHED THEN
    语句;

    其中最后语句分号不可以省略,且源表既可以是一个表也可以是一个子查询语句

    WHEN NOT MATCHED BY TARGET
    表示目标表不匹配,BY TARGET是默认的,所以上面我们直接使用WHEN NOT MATCHED THEN
    WHEN NOT MATCHED BY SOURCE
    表示源表不匹配,即目标表中存在,源表中不存在的情况。

    主要用法:
    merge无法多次更新同一行,也无法更新和删除同一行
    当源表和目标表不匹配时:
    若数据是源表有目标表没有,则进行插入操作
    若数据是源表没有而目标表有,则进行更新或者删除数据操作
    当源表和目标表匹配时:
    进行更新操作或者删除操作

    when matched 这个子句可以有两个,当有两个时,第一个子句必须是when matched and condition且两个matched子句只会执行一个,且两个子句必须
    是一个update和一个delete操作
    when not matched by source和上面类似

    merge icr_codemap_bak as a
    using icr_codemap as b
    on a.COLNAME = b.COLNAME and a.ctcode = b.ctcode
    when matched and b.pbcode <> a.pbcode
    then update set a.pbcode = b.pbcode
    when not matched
    then insert values(b.colname,b.ctcode,b.pbcode,b.note)
    ;
    可以比对字段不一致进行更新
    https://technet.microsoft.com/zh-cn/library/bb510625.aspx 这个是MSDN的网址


    在 Merge Matched 操作中,只能允许执行 UPDATE 或者 DELETE 语句。
    在 Merge Not Matched 操作中,只允许执行 INSERT 语句。
    一个 Merge 语句中出现的 Matched 操作,只能出现一次 UPDATE 或者 DELETE 语句,否则就会出现下面的错误 - An action of type 'WHEN MATCHED' cannot appear more than once in a 'UPDATE' clause of a MERGE statement.
    Merge 语句最后必须包含分号,以 ; 结束。

  • 相关阅读:
    商贸通帐套隐藏方法
    固定资产打开提示:上年度数据未结转!
    ZOJ 2432 Greatest Common Increasing Subsequence
    POJ 1080 Human Gene Functions
    POJ 1088 滑雪
    POJ 1141 Brackets Sequence
    POJ 1050 To the Max
    HDOJ 1029 Ignatius and the Princess IV
    POJ 2247 Humble Numbers
    HDOJ 1181 变形课
  • 原文地址:https://www.cnblogs.com/zfy-220/p/4977802.html
Copyright © 2011-2022 走看看