Re: [MSSQL]Встроенные процедуры+транзакции
От: Caracrist https://1pwd.org/
Дата: 11.02.10 09:16
Оценка:
Здравствуйте, Sshur, Вы писали:

S>Привет, all!



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


S>
S>create procedure test_proc
S>as
S>begin tran 

S>ROLLBACK transaction 
S>return 


S>go 

S>begin tran aa

S>exec test_proc

S>rollback tran aa
S>


S>Имеем


S>

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



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


S>MSDN:


S>

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


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



alter procedure test_proc
as
SAVE tran cc

ROLLBACK tran cc 
return 


go 

begin tran aa

exec test_proc

rollback tran aa

~~~~~
~lol~~
~~~ Single Password Solution
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.