SQLServer Merger Using语法使用和注意点

时间:2022-05-05 15:27:44

SQL多表关联数据更新,如果数据量比较少的情况下,用Update也是可以的;脚本如下:

 UPDATE NA_AgentGrpOrder
SET AttrServSIItem=b.AttrValue
FROM NA_AgentGrpOrderAttribute b
WHERE NA_AgentGrpOrder.SubsProdid=b.SubsProdid

当数量比较大时,直接用Update语句更新,效率相对会比较低,建议用Merger和Using来实现数据更新;在Merger后的是目标表,Using后面的是源表。

脚本如下:

 ;MERGE NA_AgentGrpOrder AS a
USING
(
SELECT y.SubsProdid,y.AttrValue FROM NA_AgentGrpOrderAttribute y
where y.AttrId='ServSIItem'
)AS b
ON a.SubsProdid=b.SubsProdid
WHEN MATCHED THEN
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/