昨认一点五十左右写完程序,发出去后想想该弄点数据确认一下,结果出错,检查,逻辑上不错,可就是结果不对,只好把程序一条条注释掉慢慢调试,后来偶然发现把 if 块和 else 块对调后居然对了!为这个交换,居然一直开到早上四点多!

解决方案 »

  1.   

    把中间那些程序作些注释:
    --将下量表记录插入金额对消表作为该用户的明细帐
    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
      

  2.   

    (声音颤抖地)....各位兄弟,表告诉我这是 sqlserver 2005 的 BUG, 我可是刚把硬盘格掉装了它的啊!!!
      

  3.   

    自己再顶一下!
    完整的程序内容在 needacoder 的回帖中.
    另外,到sqlserver 2000中试了一下,结果也是错的.看来怨不得2005,是自己程序有问题.