码迷,mamicode.com
首页 > 其他好文 > 详细

merge 语法解析

时间:2017-09-23 14:26:39      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:否则   values   delete   成功   let   对象   记录   连接   cti   

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

  

merge 语法解析

标签:否则   values   delete   成功   let   对象   记录   连接   cti   

原文地址:http://www.cnblogs.com/liaokui/p/7580986.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!