ALTER TRIGGER Bargaining_sTrigger
ON dbo.Bargaining
--当转账记录产生后
FOR INSERT
AS
declare @sBargaining_Revolution varchar(50),--转出账户
@sBargaining_Shiftto varchar(50),--转入账户
@sBargaining_Money varchar(50), --转出金额(转入金额)
@sMonly int,--转出账户在账目转出前的余额
@aMonly int--转入账户在账目转入前的余额
                                            --查询最新转账数据,包括:转出账户,转入账户,转出金额
select @sBargaining_Revolution=Bargaining_Revolution, 
       @sBargaining_Shiftto=Bargaining_Shiftto,
       @sBargaining_Money=Bargaining_Money
From inserted 
                                                                         --查询转出账户在账目转出前账上余额
select teacherMonly into @sMonly From Administrators Where teacherID=@sBargaining_Revolution
                                            --查询转入账户在账目转入前账上余额
select teacherMonly into @aMonly From Administrators Where teacherID=@sBargaining_Shiftto
IF @sMonly>@sBargaining_Money Then
Begin
--更新转出账户账上余额
Update Administrators Set teacherMonly=@sMonly-@sBargaining_Money Where teacherID=@sBargaining_Revolution
--更新转入账户账上余额
Update Administrators Set teacherMonly=@aMonly+@sBargaining_Money Where teacherID=@sBargaining_ShifttoEnd

解决方案 »

  1.   

    第一句就不对,后边懒得看了。inserted既可能一条记录也没有,也可能有2条或者更多记录,你不能把它“大胆”假设为总有一条记录。程序员如果过分大胆地强调自己的测试数据决定用户需求,而不是按照逻辑去写代码,就要重新从头培训才能上岗。
      

  2.   

    insert into Bargaining 
      select .... from ... where 1=2以及insert into Bargaining 
      select * from BargainingBackup这些都会触发触发器,不要仅仅认为有一条记录被插入。
      

  3.   

    http://community.csdn.net/Expert/topic/5019/5019895.xml?temp=.4305231顶一下
      

  4.   

    to sp1234(天气真好,心情越来越好):楼主就是专门搞岗前培训的