powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Вложенные T-SQL транзакции
6 сообщений из 6, страница 1 из 1
Вложенные T-SQL транзакции
    #33452752
Mike Evteev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как мне видится общий подход должен бы приблизительно таким:

Для вложения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
begin
	declare @trancount int
	select @trancount = @@trancount
	if @trancount =  0 
                -- Мы владеем транзакцией, так что начнем...
		begin tran p1
        else
		-- Кто-то позвал нас из другой транзакции, присоединяемся...
		save tran p1
        
        -- Настоящая работа здесь
	
        -- Shit happend
	if @@error <>  0 
		goto handle_errors

        if @trancount =  0 
                ' Если сам себе хозяин, сохраняемся
		commit
        -- Говорим остальным что мы ОБ
        return
        
handle_errors:
        -- Откатываемся и сообщаем о своей беде
	rollback tran p1
	return @@error
end


Все бы ничего, но штука получается очень многословная и подверженная ошибкам. Одни имена транзакций чего стоят. Sybase, кстати, не рекомендует их использовать.

Так вот вопрос - можно ли все разрулить более элегантно?
...
Рейтинг: 0 / 0
Вложенные T-SQL транзакции
    #33452866
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для mssql, но особо не отличается
шаблон для вложенных хп
...
Рейтинг: 0 / 0
Вложенные T-SQL транзакции
    #33453001
Mike Evteev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот там получается что имя транзакции или чекпойнта генерится из имени процедуры или как у меня вообще задано.
А если из внешней процедуры вложенную нужно позвать дважды? Имя ведь получится одно и тоже.
Поскольку коммит происходит только во внешней процедуре, то чекпойт сдвигается. Вроде конечно не так оно и страшно, потому что выполнение последовательное, но все же сайд эффект, что несколько волнует...
...
Рейтинг: 0 / 0
Вложенные T-SQL транзакции
    #33453043
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тут
...
Рейтинг: 0 / 0
Вложенные T-SQL транзакции
    #33453595
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mike EvteevА вот там получается что имя транзакции или чекпойнта генерится из имени процедуры или как у меня вообще задано.
А если из внешней процедуры вложенную нужно позвать дважды? Имя ведь получится одно и тоже.
Поскольку коммит происходит только во внешней процедуре, то чекпойт сдвигается. Вроде конечно не так оно и страшно, потому что выполнение последовательное, но все же сайд эффект, что несколько волнует...
тогда имя процедуры+какой-нибудь @@nestedlevel
...
Рейтинг: 0 / 0
Вложенные T-SQL транзакции
    #33453763
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, идеологически -- нет, особо ничего не сделаешь. Действительно трудный, занудный и кропотливый труд по управлению транзакциями и проверке ошибок (напоминаю, что после КАЖДОГО оператора надо проверять ошибки и , если что, соотв. образом обрабатывать завершение транзакции).

Мы боролись с этим тем, что код обработки был стандартным и
генерировался автоматически (часть кода писалась не руками, а программно).

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


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