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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM