powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про вложенные транзакции
5 сообщений из 5, страница 1 из 1
Вопрос про вложенные транзакции
    #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
Вопрос про вложенные транзакции
    #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
Вопрос про вложенные транзакции
    #32029507
Отвечаю:
п.1 и п.3 я и так делаю, а за п.2 спасиб!

Чмок!
...
Рейтинг: 0 / 0
Вопрос про вложенные транзакции
    #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
Вопрос про вложенные транзакции
    #32029515
bik_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Osya:

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


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


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