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/
