|
|
|
Проблемы с rollback
|
|||
|---|---|---|---|
|
#18+
Может кто-нибудь подсказать почему в данном примере не отрабатывает откат транзакции? Толи я с утра торможу, толи еще что? -)) 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 12:28:53 |
|
||
|
Проблемы с rollback
|
|||
|---|---|---|---|
|
#18+
Не знаю, как в SQL2000, но в 7 откат можно выполнить только к транзакции самого верхнего уровня. Т.е. если твоя именованная транзакция была открыта внутри другой транзакции, то ROLLBACK именно так себя и поведет. Решением может являтся создание точек сохранения и откат до точки сохранения. BEGIN TRANSACTION @trn SAVE TRANSACTION Save_tran ... IF ... ROLLBACK TRANSACTION Save_tran COMMIT TRANSACTION @trn Команду COMMIT следует выполнить в любом случае иначе транзакция @trn так и останется открытой несмотря на откат до точки сохранения. Но самым правильным решением будет полный отказ от именованных транзакций иначе ты рискуешь как-нибудь запутаться во всех этих именах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 12:40:49 |
|
||
|
Проблемы с rollback
|
|||
|---|---|---|---|
|
#18+
Да действительно так... Хотя не открывал других транзакций.. Если использовать неименованную транзакцию, то все работает отлично, а если именнованую, то какая-то фигня выходит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 12:47:47 |
|
||
|
Проблемы с rollback
|
|||
|---|---|---|---|
|
#18+
В некоторых случаях транзакция открывается автоматически. Например, если весь этот скрипт помещен в триггере, то следует помнить, что сам триггер выполняется внутри автоматически открывающейся транзакции. Соответсвенно, и получается как минимум 2 уровня транзакции. Для проверки можешь посмотреть значение системной переменной @@TRANCOUNT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 12:52:14 |
|
||
|
Проблемы с rollback
|
|||
|---|---|---|---|
|
#18+
Да нет, это не тригерр - хп.. Причем самое удивительное, она нормально заработала... После больше чем 10 запусков, цифры стали нормальные (как и должны быть в случае отката), хотя до этого был полный бред...И я в ней абсалюто ничего не менял - видимо какой то глюк был... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 12:58:02 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1820860]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 444ms |

| 0 / 0 |
