关于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
...全文
101 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
snake3760 2006-01-17
不是我不给分啊,是自动规定只有这么多分,我也不知道原因啊,我每次提问都是按最大分值给的啊
回复
ReViSion 2006-01-16
写出表结构吧,好晕
回复
ReViSion 2006-01-16
小气,这么老长,又这么点分,这年头。。。。。。
回复
snake3760 2006-01-16
没有更新父结点是因为不能获取更新之前和更新之后数量的差值,因而其父结点价格改变量为0
回复
cosio 2006-01-16
打几个点print出来看看!
回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2006-01-16 09:00
社区公告
暂无公告