本帖最后由 chirea 于 2011-05-29 21:24:50 编辑

解决方案 »

  1.   

    ALTER PROCEDURE USP_Leave
    @Numbers varchar(50),
    @LaveType int,
    @StartTime datetime,
    @EndTime datetime,
    @Registrant varchar(50),
    @Res nvarchar(500)
    AS
    begin transaction --开始事务
    declare @erroSum int 
    set @erroSum=0
    INSERT INTO EmployeesLeave
                             (Numbers, LaveType, StartTime, EndTime, Registrant, Res)
    VALUES        (@Numbers,@LaveType,@StartTime,@EndTime,@Registrant,@Res)set @erroSum=@erroSum+@@ERROR --累计是否错误UPDATE  EmployeesAttendance SET EmployeesStatus =@LaveType where DateMonths between @StartTime and @EndTime and Numbers=@Numbers commit transaction set @erroSum=@erroSum+@@ERROR --累计是否错误
    /*--根据是否有错误,确定事务是提交还是回滚--*/
    if @erroSum>0
        begin
             print @erroSum
             rollback transaction --交易失败,回滚事务
        end
    end
      

  2.   

    确定你的EmployeesAttendance 表里有符合
    DateMonths between @StartTime and @EndTime and Numbers=@Numbers条件的行? 
      

  3.   

    条件有符合的.如果不符合的那应该也是报错吧.@@ERROR也会加1呀.这样两条记录都不运行才对呀
      

  4.   

    @@ERROR是全局错误变量,如果sql没错.@@ERROR=0,你的sql没错,不过有没有执行结果,.@@ERROR不会变化。
      

  5.   

    ALTER PROCEDURE USP_Leave
    @Numbers varchar(50),
    @LaveType int,
    @StartTime datetime,
    @EndTime datetime,
    @Registrant varchar(50),
    @Res nvarchar(500)
    AS
    begin transaction --开始事务
    declare @erroSum int,@erroSum1 int
    set @erroSum=0
    set @erroSum1=0
    INSERT INTO EmployeesLeave
                             (Numbers, LaveType, StartTime, EndTime, Registrant, Res)
    VALUES        (@Numbers,@LaveType,@StartTime,@EndTime,@Registrant,@Res)set @erroSum=@@ROWCOUNT --累计是否错误UPDATE  EmployeesAttendance SET EmployeesStatus =@LaveType where DateMonths between @StartTime and @EndTime and Numbers=@Numbers 
    --这句更新没有执行.可上面的以经执行了.为啥还没有回回滚set @erroSum1=@@ROWCOUNT --累计是否错误
    /*--根据是否有错误,确定事务是提交还是回滚--*/
    if @erroSum=0 or @erroSum1=0
        begin
        print @erroSum
             rollback transaction --交易失败,回滚事务
        end
    else
        begin
        print @erroSum
      commit transaction --成功,提交事务,永久保存!
        end