把中间那些程序作些注释: --将下量表记录插入金额对消表作为该用户的明细帐 insert into 金额对消表(用户编号,下量日期,下量金额,下量余额,对消余额) select 用户编号,下量日期,下量金额,下量金额,下量金额 from inserted set @dxid = @@identity --从inserted表中找出刚才插入记录的用户编号 select @xluserid = 用户编号, @xlmoney = 下量金额 from inserted--到用户余额表中查找是否有该用户,开始写的时候只是select @yemoney = 用户余额 from 用户余额表 where 用户编号 = @xluserid select @ssdate =实收日期, @yemoney = 用户余额 from 用户余额表 where 用户编号 = @xluserid--如找到,则将用户原盈余金额来抵冲下量金额,否则在该表中插入一条记录,作记录该用户以后可能的盈余 if @@rowcount=0 insert into 用户余额表 (用户编号,用户余额) values (@xluserid, 0) else if @yemoney > 0 --用盈余对冲下量 begin update 金额对消表 set 实收日期 =@ssdate, 对消金额 = (case when @yemoney >= @xlmoney then @xlmoney else @yemoney end), 对消余额 = (case when @yemoney >= @xlmoney then 0 else @xlmoney - @yemoney end) where dxid = @dxid update 用户余额表 set 用户余额 = (case when @yemoney > @xlmoney then @yemoney - @xlmoney else 0 end) where 用户编号 =@xluserid end go
--将下量表记录插入金额对消表作为该用户的明细帐
insert into 金额对消表(用户编号,下量日期,下量金额,下量余额,对消余额) select 用户编号,下量日期,下量金额,下量金额,下量金额 from inserted
set @dxid = @@identity
--从inserted表中找出刚才插入记录的用户编号
select @xluserid = 用户编号, @xlmoney = 下量金额 from inserted--到用户余额表中查找是否有该用户,开始写的时候只是select @yemoney = 用户余额 from 用户余额表 where 用户编号 = @xluserid
select @ssdate =实收日期, @yemoney = 用户余额 from 用户余额表 where 用户编号 = @xluserid--如找到,则将用户原盈余金额来抵冲下量金额,否则在该表中插入一条记录,作记录该用户以后可能的盈余
if @@rowcount=0
insert into 用户余额表 (用户编号,用户余额) values (@xluserid, 0)
else
if @yemoney > 0
--用盈余对冲下量
begin
update 金额对消表 set 实收日期 =@ssdate,
对消金额 = (case when @yemoney >= @xlmoney then @xlmoney else @yemoney end),
对消余额 = (case when @yemoney >= @xlmoney then 0 else @xlmoney - @yemoney end)
where dxid = @dxid
update 用户余额表 set 用户余额 = (case when @yemoney > @xlmoney then @yemoney - @xlmoney else 0 end) where 用户编号 =@xluserid
end
go
完整的程序内容在 needacoder 的回帖中.
另外,到sqlserver 2000中试了一下,结果也是错的.看来怨不得2005,是自己程序有问题.