Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 рекурсивный rollback transaction  [new]
MaximK
Member

Откуда: Питер
Сообщений: 68
Вот такой вопрос. У меня есть хранимая процедура, в которой есть такой код:

BEGIN TRAN
...
IF(..) BEGIN
  RAISERROR('Error!', 1,11)
  ROLLBACK TRAN
  RETURN
END
...

END TRAN

Эту процедуру я вызываю из другой хранимой процедуры тоже внутри транзакции. Как мне правильно сделать так, чтобы внешняя транзакция тоже откатилась. Пока ничего лучше как возвращение процедурой(вложенной) 0 или 1 как флага успешного выполнения не придумал.
23 авг 04, 22:44    [902486]     Ответить | Цитировать Сообщить модератору
 Re: рекурсивный rollback transaction  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну можно еще во вложенной процедуре проверять не открыта ли уже транзакция. И если открыта, то просто выполнять действия.
Только это не мешает все таки сделать для процедуры возвращать код ее завершения.
24 авг 04, 00:30    [902526]     Ответить | Цитировать Сообщить модератору
 Re: рекурсивный rollback transaction  [new]
aleks2
Guest
BEGIN TRAN
...
IF(..) BEGIN
  ROLLBACK TRAN
  RAISERROR('Error!', 1,11)
  RETURN
END
...

END TRAN
-----------------
+Во внешней процедуре:
Либо явно ловишь ошибку,
Либо
SET XACT_ABORT ON
в начале внешней процедуры.
24 авг 04, 08:01    [902679]     Ответить | Цитировать Сообщить модератору
 Re: рекурсивный rollback transaction  [new]
www.perlscript.ru
Member

Откуда: Москва
Сообщений: 344
ОДин RollBack на любом уровне откатывает все вышестоящие транзакции.
24 авг 04, 09:51    [902846]     Ответить | Цитировать Сообщить модератору
 Re: рекурсивный rollback transaction  [new]
aleks2
Guest
И то верно, правда с оговоркой:

ROLLBACK TRANSACTION without a savepoint_name or transaction_name rolls back to the beginning of the transaction. When nesting transactions, this same statement rolls back all inner transactions to the outermost BEGIN TRANSACTION statement. In both cases, ROLLBACK TRANSACTION decrements the @@TRANCOUNT system function to 0.
24 авг 04, 10:11    [902922]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить