Foxtable(狐表)用户栏目专家坐堂 → 如何得到类似触发器中的inserted和deleted表


  共有1759人关注过本帖树形打印复制链接

主题:如何得到类似触发器中的inserted和deleted表

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
如何得到类似触发器中的inserted和deleted表  发帖心情 Post By:2017/3/20 13:27:00 [只看该作者]

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

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

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/20 15:11:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By: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
.......
这样每个更新语句就要去写一个对应的跨表更新语句,效率是不是比前种方式低很多




 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/20 16:31:00 [只看该作者]

 你记录好订单编号,最后一次性修改不也行?

 回到顶部