aliasghar
پنج شنبه 28 مهر 1384, 13:02 عصر
من در یک بانک اطلاعاتی بصورت زیر از Transaction استفاده کردم و حالا میخواهم بدونم اکه اصلا این کار صحیح است یا اشتباه
create procedure Detail(@Myvar dataType)
as
begin
if (condition = true)
begin Tran D1;
insrt To Mytable ...
if @@error <> 0 goto RB;
update MyTable ...
if @@error <> 0 goto RB;
if @@error <> 0
begin
RB:
print 'ERROR';
Rollback Tran D1;
Return(-1);
End Else
Begin
Print ' OK ';
Commit Tran D1;
Return (1);
End;
end
create procedure Master(@Myvar1 dataType,@MyVar2 datatype)
as
begin
Declare @RM_Detail;
begin Tran M1;
exec @RM_Detail = Detail X
if @RM_Detail = -1
begin
print 'error in execute proc datail';
goto RB;
end
Do eny thing and call another porcedure
if @@error <> 0
begin
RB:
print 'ERROR';
Rollback Tran M1;
Return(-1);
End Else
Begin
Print ' OK ';
Commit Tran M1;
Return (1);
End;
end
در application بیشتر پروسیجر Master را call میکنم ولی اگر در حین انجان آن مخصوصا در حیتن انجام پروسیجر detail دچار مشکل شود کلیه تراکنش ها را لغو کرده (یعنی حتی تراکنش Master هم Rollback میشود) و بعد هم
پیام می دهد مه تعداد تراکنش ها شما صحیح نیست
چرا؟
create procedure Detail(@Myvar dataType)
as
begin
if (condition = true)
begin Tran D1;
insrt To Mytable ...
if @@error <> 0 goto RB;
update MyTable ...
if @@error <> 0 goto RB;
if @@error <> 0
begin
RB:
print 'ERROR';
Rollback Tran D1;
Return(-1);
End Else
Begin
Print ' OK ';
Commit Tran D1;
Return (1);
End;
end
create procedure Master(@Myvar1 dataType,@MyVar2 datatype)
as
begin
Declare @RM_Detail;
begin Tran M1;
exec @RM_Detail = Detail X
if @RM_Detail = -1
begin
print 'error in execute proc datail';
goto RB;
end
Do eny thing and call another porcedure
if @@error <> 0
begin
RB:
print 'ERROR';
Rollback Tran M1;
Return(-1);
End Else
Begin
Print ' OK ';
Commit Tran M1;
Return (1);
End;
end
در application بیشتر پروسیجر Master را call میکنم ولی اگر در حین انجان آن مخصوصا در حیتن انجام پروسیجر detail دچار مشکل شود کلیه تراکنش ها را لغو کرده (یعنی حتی تراکنش Master هم Rollback میشود) و بعد هم
پیام می دهد مه تعداد تراکنش ها شما صحیح نیست
چرا؟