Зачем я могу хотеть иметь обработку транзакций в расчетной процедуре?

Gobzo Kobler
Дата: 17.12.2002 16:45:00
Работаю на большом существующем проекте. Во всех процедурах, расчитывающих что-то из базы, в конце стоит:

SELECT @trancount = @@TRANCOUNT

--куча расчетного кода


Success:
IF @trancount < @@TRANCOUNT
COMMIT TRAN
RETURN 0

Failure:
IF @trancount < @@TRANCOUNT
ROLLBACK TRAN
RETURN -1

Процедура ничего не меняет. В начале сохраняется уровень, а в конце проверяется. Зачем они так делают?
alexeyvg
Дата: 17.12.2002 16:56:23
Если процедура была вызвана в контексте транзакции, то не открывать новую, в противном случае открыть.
Стандартное начало/окончание для модифицирующей процедуры.
tygra
Дата: 17.12.2002 18:39:01
Да нет, тут проверки на существующую транзакцию то нет в начале.

Просто люди зачем то проверяют, что если все правильно отработало но где-то в вызываемой процедуре транзакцию не закрыли - то закрыть А если вылет с ошибкой - то соответственно откатить. Только очень это странно - не доверять написанному коду ............... :()
alexeyvg
Дата: 17.12.2002 18:52:44
2tygra
Как это нет?
А это:

SELECT @trancount = @@TRANCOUNT


Просто автор, видимо, не заметил, что между

SELECT @trancount = @@TRANCOUNT

и

Success:

есть ещё:

IF @trancount < @@TRANCOUNT
BEGIN TRAN
alexeyvg
Дата: 17.12.2002 18:55:53
Я что-то неправильно сказал. Спутал
IF @trancount < @@TRANCOUNT
с
IF @trancount > 0

А здесь, действительно, проверяется, что где-то в вызываемой процедуре появилась не закрытая транзакция...
MiCe
Дата: 17.12.2002 19:32:34
делают именно на БОЛЬШИХ проектах...
когда работает много разработчиков и до окончания процесса разработки...
потом по хорошему нужно вылизывать и поудалять на к черту... но иногда до этого и не доходит....