[MSSQL]Встроенные процедуры+транзакции
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 11.02.10 09:06
Оценка:
Привет, all!


Что-то я не понял с использованием транзакций внутри встроенных процедур

create procedure test_proc
as
begin tran 

ROLLBACK transaction 
return 


go 

begin tran aa

exec test_proc

rollback tran aa


Имеем

Msg 266, Level 16, State 2, Procedure test_proc, Line 0
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0.
Msg 3903, Level 16, State 1, Line 5
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.



Почему такое происходит?

MSDN:

В хранимых процедурах инструкция ROLLBACK TRANSACTION без аргументов savepoint_name или transaction_name откатывает все инструкции к самой внешней инструкции BEGIN TRANSACTION. Вызов инструкции ROLLBACK TRANSACTION в хранимой процедуре является причиной того, что значение @@TRANCOUNT после завершения хранимой процедуры отличается от значения @@TRANCOUNT при выдаче хранимой процедурой информационного сообщения. Это сообщение не влияет на последующую обработку.


Из выделенного непонятно, должна ли откатываться самая внешняя транзакция А если должна, то как сделать чтобы не она не откатывалась? transaction name дать тоже не получается.
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.