mergeinto是循环吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mergeinto是循环吗相关的知识,希望对你有一定的参考价值。

参考技术A 不是,mergeinto是SQL Syntax,用于将一个表的数据合并到另一个表中。它不像循环,它只是将一个表的数据插入另一个表中。

merge 语法解析

  
merge into 支持sqlserver 2008 和以上的版本 无论是INSERT还是UPDATE,从执行之间上看,MERGE INTO(MERGE)都要比直接INSERT/UPDATE的效率高;

  MERGE INTO - 数据的目的地,将数据最终 MERGE 到的表对象

  USING 与源表连接 ON 关联的条件

  WHEN MATCHED - 如果匹配成功,即关联条件成功 (这时就应该将 SOURCE 中其它的所有字段值更新到 TARGET 表中)

  WHEN NOTMATCHED BY TARGET - 如果匹配不成功 (TARGET 中没有这一条记录但是 SOURCE 表有,说明 SOURCE 表多了新数据因此应该插入到 TARGET 表中)

  WHEN NOTMATCHED BY SOURCE - 如果匹配不成功 (SOURCE 中没有这一条记录但是 TARGET 表有,说明 SOURCE 表可能把这条数据删除了,所以 TARGET 也应该删除)

下面是 如果数据不存在添加,存在更新
merge into table t using (select  id = id) b on( t.id = b.id) 
             when matched then update set name = @name,[email protected] when not matched then 
             insert(name, age) 
             values(@name,@age); 

  



还要注意的是有一些限制条件:

  • 在 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 语句最后必须包含分号,以 ; 结束。

  

以上是关于mergeinto是循环吗的主要内容,如果未能解决你的问题,请参考以下文章

Oracle之mergeInto

merge 语法解析

oracle中的merge into用法解析

Oracle存储过程merge into

如何知道 Hsqldb "MERGE INTO" 是不是进行了插入或更新

如何替换merge into