Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про вложенные транзакции / 5 сообщений из 5, страница 1 из 1
04.05.2002, 17:09
    #32029488
Вопрос про вложенные транзакции
Уважаемые! Посмотрите, всю ли я правильно делаю:

DECLARE @transcount INT
SET @transcount=@@TRANCOUNT

IF @transcount=0
BEGIN TRANSACTION mytran
ELSE
SAVE TRAN mytran
......серия команд
......серия команд
IF @@ERROR=0
IF @transcount=0
COMMIT TRANSACTION
ELSE
COMMIT TRANSACTION mytran
ELSE
ROLLBACK TRAN mytran

С уважением и благодарностью за ответы...
...
Рейтинг: 0 / 0
04.05.2002, 18:26
    #32029491
bik_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про вложенные транзакции
Значится так. Полагаю, что речь идет о вложенных транзакциях в хранимых процедурах.

1. Статус операции (@@ERROR=0) необходимо проверять после каждой команды,
а не делать серию команд без проверки.

2. Блок

\nIF @@ERROR=0
IF @transcount=0
COMMIT TRANSACTION
ELSE
COMMIT TRANSACTION mytran
ELSE
ROLLBACK TRAN mytran


лучше переписАть так:

\nif (@transcount=0)
COMMIT TRANSACTION


и вот почему: COMMIT необходим только тогда, когда наш фрагмент сам начал транзакцию.
В проьтивном случае, вызвавшая процедура сама решит, делать ли COMMIT или нет...

3. Неплохо бы добавить возврат кода ошибки для приложения

Целую
...
Рейтинг: 0 / 0
06.05.2002, 04:56
    #32029507
Вопрос про вложенные транзакции
Отвечаю:
п.1 и п.3 я и так делаю, а за п.2 спасиб!

Чмок!
...
Рейтинг: 0 / 0
06.05.2002, 05:54
    #32029510
Osya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про вложенные транзакции
Страждущая Новенькая, я совсем не понял смысл этих плясок с бубном. Код
IF @transcount=0
BEGIN TRANSACTION mytran
означает, что ты хочешь стартовать транзакцию, если ни одной еще не запущено? Читай про вложенные транзакции. Вкратце...
\nBEGIN TRAN -- Стартовали первую транзакцию, @@trancount=1
BEGIN TRAN -- Стартовали вторую транзакцию, @@trancount=2

IF @@Error<>0
ROLBACK TRAN -- Откатываются ВСЕ!!! транзакции

COMMIT TRAN -- Закончили вторую транзакцию @@trancount=1. На самом деле ничего не закомичено!!!

IF @@Error<>0
ROLBACK TRAN -- Откатываются ВСЕ!!! транзакции
COMMIT TRAN -- Закончили первую транзакцию @@trancount=0. Вот теперь все закомичено.

Именовать транзакции не имеет смысла
...
Рейтинг: 0 / 0
06.05.2002, 06:58
    #32029515
bik_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про вложенные транзакции
2Osya:

Можно, конечно, убрать mytran из BEGIN TRANSACTION mytran в блоке
\nIF @transcount=0
BEGIN TRANSACTION mytran
ELSE
SAVE TRAN mytran


Но тогда ухудшается читабельность кода - так ведь проще понять, что стартуем
транзакцию для данной процедуры.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про вложенные транзакции / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]