关于update的触发器,高手帮忙啊

snake3760 2006-01-16 09:00:36
我的目的是更新一个叶子结点的数量时,及时更新此结点所有父结点的价格,但是没有达到要求,不会更新,请各位大哥帮小弟看看,先谢过了
ALTER TRIGGER updatepricebynum
ON dbo.RealRationanalyse
FOR UPDATE
AS
if update(num)
begin
declare @num float(8)
declare @num1 float(8)
declare @price money
declare @balance float(8)
declare @marketprice money
declare @pid int
declare @parentid int
select @num=realrationanalyse.num from realrationanalyse,deleted where realrationanalyse.id=deleted.id

select @num1=inserted.num,@price=realrationanalyse.marketprice,@pid=realrationanalyse.parentid from realrationanalyse,inserted where realrationanalyse.id=inserted.id

set @balance=@num1-@num
set @balance=@balance*@price

select @marketprice=marketprice,@num=num from realrationanalyse where id=@pid

set @marketprice=@marketprice+@balance
--更新其父结点的市场价格
update realrationanalyse set marketprice=@marketprice where id=@pid

set @balance=@balance*@num
--一直往上查找其父结点,直到找到根结点为止
select @parentid=parentid from realrationanalyse where id=@pid

while(@parentid<>0)
begin
set @pid=@parentid
select @marketprice=marketprice,@parentid=parentid,@num=num from realrationanalyse where id=@parentid
update realrationanalyse set marketprice=@marketprice+@balance where id=@pid
set @balance=@balance*@num
end
end
...全文
147 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
snake3760 2006-01-17
  • 打赏
  • 举报
回复
不是我不给分啊,是自动规定只有这么多分,我也不知道原因啊,我每次提问都是按最大分值给的啊
ReViSion 2006-01-16
  • 打赏
  • 举报
回复
写出表结构吧,好晕
ReViSion 2006-01-16
  • 打赏
  • 举报
回复
小气,这么老长,又这么点分,这年头。。。。。。
snake3760 2006-01-16
  • 打赏
  • 举报
回复
没有更新父结点是因为不能获取更新之前和更新之后数量的差值,因而其父结点价格改变量为0
cosio 2006-01-16
  • 打赏
  • 举报
回复
打几个点print出来看看!

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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