Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблемы с rollback / 5 сообщений из 5, страница 1 из 1
26.08.2002, 12:28:53
    #32045838
Denisco
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с rollback
Может кто-нибудь подсказать почему в данном примере не отрабатывает откат транзакции? Толи я с утра торможу, толи еще что? -))
begin tran @trn
while @@fetch_status=0
begin
update t_rest set Vipisano=Vipisano-@qnty,Prodano=Prodano+@qnty, Qnty=Qnty-@qnty,@r_id=[id] where NameId=@nameid and invoice=@invoice
INSERT INTO [IntelBase].[dbo].[t_rest_items]( [id_rest], [OrderId], [Qnty], [Price])
VALUES(@r_id,@id1, @qnty, @price)


fetch next from Item_cur into
@id,@nameid,@invoice,@qnty
end
rollback tran @trn
close item_cur
deallocate Item_cur

--commit tran @trn
...
Рейтинг: 0 / 0
26.08.2002, 12:40:49
    #32045842
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с rollback
Не знаю, как в SQL2000, но в 7 откат можно выполнить только к транзакции самого верхнего уровня.

Т.е. если твоя именованная транзакция была открыта внутри другой транзакции, то ROLLBACK именно так себя и поведет.

Решением может являтся создание точек сохранения и откат до точки сохранения.

BEGIN TRANSACTION @trn
SAVE TRANSACTION Save_tran
...
IF ... ROLLBACK TRANSACTION Save_tran
COMMIT TRANSACTION @trn

Команду COMMIT следует выполнить в любом случае иначе транзакция @trn так и останется открытой несмотря на откат до точки сохранения.

Но самым правильным решением будет полный отказ от именованных транзакций иначе ты рискуешь как-нибудь запутаться во всех этих именах.
...
Рейтинг: 0 / 0
26.08.2002, 12:47:47
    #32045846
Denisco
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с rollback
Да действительно так... Хотя не открывал других транзакций.. Если использовать неименованную транзакцию, то все работает отлично, а если именнованую, то какая-то фигня выходит...
...
Рейтинг: 0 / 0
26.08.2002, 12:52:14
    #32045850
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с rollback
В некоторых случаях транзакция открывается автоматически.

Например, если весь этот скрипт помещен в триггере, то следует помнить, что сам триггер выполняется внутри автоматически открывающейся транзакции. Соответсвенно, и получается как минимум 2 уровня транзакции.

Для проверки можешь посмотреть значение системной переменной @@TRANCOUNT
...
Рейтинг: 0 / 0
26.08.2002, 12:58:02
    #32045852
Denisco
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с rollback
Да нет, это не тригерр - хп.. Причем самое удивительное, она нормально заработала... После больше чем 10 запусков, цифры стали нормальные (как и должны быть в случае отката), хотя до этого был полный бред...И я в ней абсалюто ничего не менял - видимо какой то глюк был...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблемы с rollback / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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