ورود

View Full Version : اجرا نشدن دستور rollback در if



resident
یک شنبه 17 فروردین 1393, 18:30 عصر
سلام.
من sp ی زیر رو دارم.

CREATE Procedure MainSp
@Parameters ...
,@ErrorNumber int out
as
Begin
Begin Transaction
exec sp1 @Parameters,@ErrorNumber out
if @ErrorNumber!=0
ROLLBACK TRANSACTION;

exec sp2 @Parameters,@ErrorNumber out
if @ErrorNumber!=0
ROLLBACK TRANSACTION;

COMMIT TRANSACTION;
End

مشکلم اینه که در if ها وقتی @ErrorNumber برابر صفر است، rollbackنمی کنه. Trace که می کنم روی دستور rollback میره اما میره دستورهای بعدی رو هم اجرا می کنه.
چرا این اتفاق می افته؟

espootin
یک شنبه 17 فروردین 1393, 21:12 عصر
با سلام.
می تونی هر وقت به خطا رسیدی، یک Throw بزنی و سپس توی Catch ، دستور Rollback را اجرا کنی.

espootin
یک شنبه 17 فروردین 1393, 21:18 عصر
اینم یک نمونه :


alter Procedure MainSp


as
Begin
begin try
declare @ErrorNumber int = 0;


Begin Transaction

-- execute your queries
if @ErrorNumber = 0
THROW 51000, 'Your Error Command text.', 10;



COMMIT TRANSACTION;
end try
begin catch
rollback;


THROW ;
end catch
End