SQLServer Merger Using语法使用和注意点
SQL多表关联数据更新,如果数据量比较少的情况下,用Update也是可以的;脚本如下:
1 UPDATE NA_AgentGrpOrder 2 SET AttrServSIItem=b.AttrValue 3 FROM NA_AgentGrpOrderAttribute b 4 WHERE NA_AgentGrpOrder.SubsProdid=b.SubsProdid
当数量比较大时,直接用Update语句更新,效率相对会比较低,建议用Merger和Using来实现数据更新;在Merger后的是目标表,Using后面的是源表。
脚本如下:
1 ;MERGE NA_AgentGrpOrder AS a 2 USING 3 ( 4 SELECT y.SubsProdid,y.AttrValue FROM NA_AgentGrpOrderAttribute y 5 where y.AttrId='ServSIItem' 6 )AS b 7 ON a.SubsProdid=b.SubsProdid 8 WHEN MATCHED THEN 9 UPDATE set a.AttrServSIItem=b.AttrValue;
上面的写只是Merge和Using的其中一种写法,可以上面叫 WHEN NOT MATCHED THEN INSERT 来执行数据插入等等。
Merge和Using做数据更新虽然会比较快,但是它也有一定的缺陷,
比如在Using后面的源表,和目标表On条件匹配时,源表不能有重复的数据,如果有,就会执行失败并且报错,所有的更新记录都会被回滚。
Merge和Using执行操作时,就算执行成功,有可能不是你想要的执行结果。可以参考下面这个博文。
http://blog.itpub.net/26110315/viewspace-723389/