以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何得到类似触发器中的inserted和deleted表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97874)

--  作者:happyft
--  发布时间:2017/3/20 13:27:00
--  如何得到类似触发器中的inserted和deleted表
sql触发器数据更新时会产生两个表,inserted和deleted,这样很方便用这两个表的数据去批量跨表更新其他相关表的数据,但只有用触发器时才有这两个表吧?
原来某个表保存时要将表中改动过的数据跨表更新其他表中的相关数据,是通过beforesavedatarow事件用加入事务去处理,但这样每行保存去处理效率太低。现在想在保存时可以按论坛上网友的方法判断修改的三种状态,新增,删除或更新,用sql语句合成在一起通过事务执行,现在就是想在保存时怎么来一次性获取新增的或者删除的或者有更新的所有行的数据作为一个集合表去跨表更新其他相关表中的数据,是否是执行事务时将这此数据统一写入到一个临时表中再去处理?

说的太多,不知讲明白了没有?

谢谢!

--  作者:有点色
--  发布时间:2017/3/20 15:11:00
--  

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=53006&skin=0

 


--  作者:HappyFt
--  发布时间:2017/3/20 15:59:00
--  
这个我明白,我的意思就是我用类似的sql语句通用事务一次性更新了一个表的很多行数据,同时要跨表更新订单累计表中的累计数量,
比如一个事务中有多个如下的更新语句:
update 订单 se t 数量 = 数量 + 本次变动增量 where 订单编号 = 1
update 订单 se t 数量 = 数量 + 本次变动增量 where 订单编号 = 2
。。。。。
要怎么样才能将这些变动统一保存到一个结果集例如“合成表b”中,这样就可以用
update a.累计数量 = a.累计数量 + b.本次变动增量 from 订单累计表 a inner join 合成表 b 
where a.订单编号 in (se lect distinct 订单编号 from 合成表 b)
一次就可以更新订单累计表中的数据。

否则我现在只能用
update 订单 se t 数量 = 数量 + 本次变动增量 where 订单编号 = 1
update 订单累计表 se t 累计数量 = 累计数量 + 本次变动量 where 订单编号 = 1
update 订单 se t 数量 = 数量 + 本次变动增量 where 订单编号 = 2
update 订单累计表  se t 累计数量 = 累计数量 + 本次变动量 where 订单编号 = 2
.......
这样每个更新语句就要去写一个对应的跨表更新语句,效率是不是比前种方式低很多




--  作者:有点色
--  发布时间:2017/3/20 16:31:00
--  
 你记录好订单编号,最后一次性修改不也行?