вложенные процедуры, как сделать транзакцию?

Winnipuh
Дата: 20.01.2009 14:03:06
как правильно сделать такое:

всё, что делает процедура usp_B чтобы было в транзакции, и в конце, чтобы
был её коммит или роллбэк

procedure usp_A
begin tran

...

exec @res1 = usp_B
...


if @res<>0 rollback tran
else          commit  tran
tpg
Дата: 20.01.2009 14:18:48
Как-то так...
if (@res<>0 or @@error <> 0) and @@trancount <> 0 rollback tran
Winnipuh
Дата: 20.01.2009 14:58:37
tpg
Как-то так...
if (@res<>0 or @@error <> 0) and @@trancount <> 0 rollback tran


если я во вложенной процедуре сделаю коммит или роллбэк - внешняя транзакция (открытая в первой процедуре) - тоже закроется или откатится...
А мне надо бы, чтобы я в В сделал откат только транзакции, открытой в В, или коммит
Glory
Дата: 20.01.2009 15:01:20
Winnipuh
tpg
Как-то так...
if (@res<>0 or @@error <> 0) and @@trancount <> 0 rollback tran


если я во вложенной процедуре сделаю коммит или роллбэк - внешняя транзакция (открытая в первой процедуре) - тоже закроется или откатится...
А мне надо бы, чтобы я в В сделал откат только транзакции, открытой в В, или коммит

В MSSQL нет вложенных транзакций.
Winnipuh
Дата: 20.01.2009 15:26:54
Glory
Winnipuh
tpg
Как-то так...
if (@res<>0 or @@error <> 0) and @@trancount <> 0 rollback tran


если я во вложенной процедуре сделаю коммит или роллбэк - внешняя транзакция (открытая в первой процедуре) - тоже закроется или откатится...
А мне надо бы, чтобы я в В сделал откат только транзакции, открытой в В, или коммит

В MSSQL нет вложенных транзакций.


знаю, потому и вопрос, как смоделировать...
daw
Дата: 20.01.2009 15:31:39

было, помнится, такое обсуждение:
http://www.sql.ru/forum/actualthread.aspx?tid=391917


Posted via ActualForum NNTP Server 1.4

Glory
Дата: 20.01.2009 15:42:08
Winnipuh
Glory
Winnipuh
tpg
Как-то так...
if (@res<>0 or @@error <> 0) and @@trancount <> 0 rollback tran


если я во вложенной процедуре сделаю коммит или роллбэк - внешняя транзакция (открытая в первой процедуре) - тоже закроется или откатится...
А мне надо бы, чтобы я в В сделал откат только транзакции, открытой в В, или коммит

В MSSQL нет вложенных транзакций.


знаю, потому и вопрос, как смоделировать...

Как можно смоделировать то, чего не существует ?
Если процедура usp_B не должна участвовать в текущей транзакции, то вам придется запускать за пределами текущего коннекта
--__Александр__--
Дата: 20.01.2009 15:42:30
Glory
Winnipuh
tpg
Как-то так...
if (@res<>0 or @@error <> 0) and @@trancount <> 0 rollback tran


если я во вложенной процедуре сделаю коммит или роллбэк - внешняя транзакция (открытая в первой процедуре) - тоже закроется или откатится...
А мне надо бы, чтобы я в В сделал откат только транзакции, открытой в В, или коммит

В MSSQL нет вложенных транзакций.


А, формально врете !!!!)))
http://msdn.microsoft.com/ru-ru/library/ms189336(SQL.90).aspx
Пишут:Явные транзакции могут быть вложенными.
Английская версия
http://msdn.microsoft.com/en-us/library/ms189336(SQL.90).aspx
"Explicit transactions can be nested".
Glory
Дата: 20.01.2009 15:46:34
Надо читать больше одной строчки из приведенных статей

"Фиксация внутренних транзакций игнорируется компонентом SQL Server Database Engine. Транзакция либо фиксируется, либо откатывается в зависимости от предпринятого действия в конце самой внешней транзакции. Если внешняя транзакция зафиксирована, внутренние вложенные транзакции также будут зафиксированы. Если внешняя транзакция откатывается, то все внутренние транзакции также будут отменены, независимо от того, были ли отдельные внутренние транзакции зафиксированы."
--__Александр__--
Дата: 20.01.2009 15:49:58
Glory
Надо читать больше одной строчки из приведенных статей

"Фиксация внутренних транзакций игнорируется компонентом SQL Server Database Engine. Транзакция либо фиксируется, либо откатывается в зависимости от предпринятого действия в конце самой внешней транзакции. Если внешняя транзакция зафиксирована, внутренние вложенные транзакции также будут зафиксированы. Если внешняя транзакция откатывается, то все внутренние транзакции также будут отменены, независимо от того, были ли отдельные внутренние транзакции зафиксированы."


да я это все читал. И как COMMIT/ROLLBACK работате на вложенных транзакциях.
Я же в посте не зря слово написал - ФОРМАЛЬНО.