.........
declare @numErr numeric(12,2)
set @numErr=0
begin tran
.................
...........
if @i<>@count --怎样实现在这个事物里,如果这个判断条件满足,就不执行下面的语句,直接回滚上面的语句
return
................
...............
set @numErr=@@error
if @numErr=0
begin
commit tran
return 1
end
else
begin
rollback tran
return 0end
begin
rollback tran
return
end
如果操作成功,修改用户的状态
否则,回滚tab_1,将分配的卡数还原
.........
declare @numErr numeric(12,2)
set @numErr=0
begin tran
update top (@count) tab_1 set mobile=@mobile
select @i=count(1) from tab_1 where mobile=@mobileif @i<>@count --怎样实现在这个事物里,如果这个判断条件满足,就不执行下面的语句,直接回滚上面的语句
rollback tran
select 0
update tab_status set [status]=1 where mobile=@mobile
set @numErr=@@error
if @numErr=0
begin
commit tran
return 1
end
else
begin
rollback tran
return 0end
可是当@i<>@count---下面的update tab_status set [status]=1 where mobile=@mobile
有时候还是被执行了
return 1
因为之前的update top (@count) tab_1 set mobile=@mobile
若果本次操作失败,这句必须回滚
begin
rollback tran
return 0end
if @i<>@count --怎样实现在这个事物里,如果这个判断条件满足,就不执行下面的语句,直接回滚上面的语句
begin
rollback tran
return 0end有时候 出现失败的情况
BEGIN TRY
BEGIN TRANSACTION;
...........
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
........... IF (XACT_STATE()) = -1
BEGIN
PRINT
N'The transaction is in an uncommittable state. ' +
'Rolling back transaction.'
ROLLBACK TRANSACTION; END; -- Test if the transaction is active and valid.
IF (XACT_STATE()) = 1
BEGIN
-- PRINT
-- N'The transaction is committable. ' +
-- 'Committing transaction.'
COMMIT TRANSACTION;
END;
END CATCH;