ورود

View Full Version : SP تو در تو



irpersian20
پنج شنبه 05 اردیبهشت 1392, 00:59 صبح
سلام
3 تا SP دارم.
SP 1 و SP2 دارای ساختار TRY-CATCH هستند و درون CATCH ها نیز ROLLBACK است و درست کار میکند.
در SP3 به این صورت عمل شده
یک دستور دارد و فراخوانی SP1 و SP2 . در SP3 نیر گفتیم اگر دستور اولت اجرا نشد rollbackکن.بعد هم اجرا sp1 و sp2
در SP3 ساختار try-catch نداریم و از متغیر سراسری بهره بردم
حالا مشکل اینجاست که وقتی ارور در SP1 یا SP2 داشته باشیم و بخواد ROLLBACK کنه .با خطا مواجه میشیم




SP2
try
tran
update ...
commit tran
end
catch
rollback
end






SP1
try
TRAN
update
COMMIT TRAN ...
end
catch
rollback
end



SP3
TRAN
insert..
IF (@@ERROR <> 0)
ROLLBACK
EXEC SP1;
ROLLBACK
EXECUTE SP2;
ROLLBACK
COMMIT TRAN







Msg 266, Level 16, State 2, Procedure SP1, Line 0
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.
Msg 3903, Level 16, State 1, Procedure SP3, Line 12
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.





Msg 3903, Level 16, State 1, Procedure SP3, Line 14
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
Msg 3902, Level 16, State 1, Procedure SP3, Line 15
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.

irpersian20
پنج شنبه 05 اردیبهشت 1392, 11:30 صبح
ببنید منظورم من این هست که من دو تا SP جداگانه دارم.
هر کدام برای خودشان اجرا میشن.
حالا میخوام اگر در SP2 خطایی رخ داد و rollback شد. کل کارهایی که تا حالا شده rollback بشه. یعنی دستورات اجرا شده در SP1 م rollback شود