2014-01-24 4 views
0

Я вижу странное поведение, которое произошло на случайной основе. Вот что моя процедура магазина в основном делает.Sql Transaction не выполняет полный откат

begin try 
     begin tran 
     insert into table1 
     update table2 
     insert into table3 
     commit tran 
end try 

begin catch 
     rollback tran 
end catch 

Для большую часть времени выше код работает отлично, за исключением один раз в какое-то время (один раз в день или два), когда происходит какая-то ошибка, то сделка не откатить изменения из всех 3-х таблиц.

begin try 
      begin tran 
      insert into table1----Rollback doesn't happen 
      update table2--Rollback happens 
      insert into table3--Rollback happens 
      commit tran 
    end try 

    begin catch 
      rollback tran 
    end catch 

Может ли кто-нибудь может предложить что-то, где я могу ошибаться, или мне нужно обрабатывать транзакции каким-то другим способом?

Заранее спасибо.

+0

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

+0

Как вы определили, что откат выполняется/не происходит так, как вы описываете. Какая информация/журналы и т. Д. У вас есть, что вы считаете, что это проблема? –

+1

Вы сказали, что для 'update table2' и' insert into table3' происходит откат. Это не обязательно так. Если ошибка возникает в 'insert into table1', выполнение сразу же переходит в блок catch. Так что это не «откат», а «операция никогда не выполняется». –

ответ

Смежные вопросы