zoukankan      html  css  js  c++  java
  • 使用merge关键字对数据进行 insert 或update操作

    使用 merge 对数据进行 插入或 修改的操作

    CREATE procedure InsertUnitMeasure @a nvarchar(100),@b nvarchar(100)
    as
    begin
    set nocount on
    merge
    temp as target --数据目标源 temp是表
    using (select @a,@b) as source (a,b) -- 数据源
    on (target.a=source.a) --比较的字段
    when matched then update set b=source.b --如果符合 就更新 b字段
    when not matched then insert(a,b)values(source.a,b); --如果不符合就插入
    --output deleted.*,$action,inserted.* into MyTempTable; --此句 中的 $action没法理解 只能想当于执行的类型
    end

    MERGE 语句最多可以有两个 WHEN MATCHED 子句。如果指定了两个子句,则第一个子句必须同时带有一个 AND <search_condition> 子句。对于任何给定的行,只有在未应用第一个 WHEN MATCHED 子句的情况下,才会应用第二个 WHEN MATCHED 子句。如果有两个 WHEN MATCHED 子句,那么其中的一个必须指定 UPDATE 操作,而另一个必须指定 DELETE 操作。如果在 <merge_matched> 子句中指定了 UPDATE,并且根据 <merge_search_condition>,<table_source> 中的多个行与 target_table 中的某一行匹配,则 SQL Server 将返回错误。MERGE 语句无法多次更新同一行,也无法更新和删除同一行。

    指定对于 <table_source> ON <merge_search_condition> 返回的每一行,如果该行与 target_table 中的行不匹配但是满足其他搜索条件(如果存在),则在 target_table 中插入一行。要插入的值是由 <merge_not_matched> 子句指定的。MERGE 语句只能有一个 WHEN NOT MATCHED 子句。

    MERGE 语句最多可以有两个 WHEN NOT MATCHED BY SOURCE 子句。如果指定了两个子句,则第一个子句必须同时带有一个 AND <clause_search_condition> 子句。对于任何给定的行,只有当未应用第一个 WHEN NOT MATCHED BY SOURCE 子句时才会应用第二个子句。如果有两个 WHEN NOT MATCHED BY SOURCE 子句,那么其中的一个必须指定 UPDATE 操作,而另一个必须指定 DELETE 操作。在 <clause_search_condition> 中只能引用目标表中的列。


  • 相关阅读:
    (转载)教你在PHP中使用全局变量
    (转载)遍历memcache中已缓存的key
    (转载)PHP_Memcache函数详解
    PHP去除空白字符
    (转载)用PHP正则表达式清除字符串的空白
    (转载)PHP静态方法
    (转载)PHP 动态生成表格
    (转载)PHP strtotime函数详解
    (转载)URL与URI的区别
    ldap集成confluence
  • 原文地址:https://www.cnblogs.com/shikyoh/p/2088051.html
Copyright © 2011-2022 走看看