这句触发器的效率是不是很低?

usxue 2007-10-17 09:04:19

CREATE TRIGGER [abc] ON dbo.a
FOR INSERT
AS
begin
update b set aNum=aNum+(select count(1) from inserted where aid=b.aid)
return
error:
rollback transaction
end

感觉这个update的语句的效率比较低,是不是将表b中的所有的数据都更新了一遍?
如果这样的语句会不会好点:

update b set aNum=aNum+(select count(1) from inserted where aid=b.aid) where b.aid in (select distinct(aid) from inserted)

这句效率是不是更高点?
谢谢!!
...全文
204 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hb_gx 2007-10-17
  • 打赏
  • 举报
回复
第一个写法效率是很低,因为将整个表的b字段都更新了,虽然有些aid != b.aid 的数据是没变,可是一样执行了更新的操作
dobear_0922 2007-10-17
  • 打赏
  • 举报
回复
update b set aNum=aNum+(select count(1) from inserted where aid=b.aid) 
where exists(select 1 from inserted where aid=b.aid)
usxue 2007-10-17
  • 打赏
  • 举报
回复
to dawugui:
正确.
update b set aNum=aNum+(select count(1) from inserted where aid=b.aid)

不是所有,是aid = b.aid
---------------------------------
应该是更新了全部数据吧,不仅仅是aid=b.aid
如果aid = b.aid的话,那么就返回的是0,但同样还是更新了数据啊。
难道不是吗?
dawugui 2007-10-17
  • 打赏
  • 举报
回复
正确.
update b set aNum=aNum+(select count(1) from inserted where aid=b.aid)

不是所有,是aid = b.aid
kk19840210 2007-10-17
  • 打赏
  • 举报
回复
上边的是把全部数据更新

加上 WHERE 语句效率是高点
mengmou 2007-10-17
  • 打赏
  • 举报
回复
是的

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧