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
View Code

当数量比较大时,直接用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;
View Code

上面的写只是Merge和Using的其中一种写法,可以上面叫 WHEN NOT MATCHED THEN INSERT 来执行数据插入等等。

Merge和Using做数据更新虽然会比较快,但是它也有一定的缺陷,

比如在Using后面的源表,和目标表On条件匹配时,源表不能有重复的数据,如果有,就会执行失败并且报错,所有的更新记录都会被回滚。

Merge和Using执行操作时,就算执行成功,有可能不是你想要的执行结果。可以参考下面这个博文。

http://blog.itpub.net/26110315/viewspace-723389/

posted @ 2018-01-19 15:16  周劭洋  阅读(2606)  评论(0编辑  收藏  举报