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
确定你的EmployeesAttendance 表里有符合 DateMonths between @StartTime and @EndTime and Numbers=@Numbers条件的行?
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
@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
DateMonths between @StartTime and @EndTime and Numbers=@Numbers条件的行?
@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