Я вижу странное поведение, которое произошло на случайной основе. Вот что моя процедура магазина в основном делает.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
Может ли кто-нибудь может предложить что-то, где я могу ошибаться, или мне нужно обрабатывать транзакции каким-то другим способом?
Заранее спасибо.
Это не представляется возможным. Ваш анализ должен быть неправильным. Единственный способ, с помощью которого транзакция будет частично откатываться, будет, если вы намеренно откатывались обратно в точку сохранения. –
Как вы определили, что откат выполняется/не происходит так, как вы описываете. Какая информация/журналы и т. Д. У вас есть, что вы считаете, что это проблема? –
Вы сказали, что для 'update table2' и' insert into table3' происходит откат. Это не обязательно так. Если ошибка возникает в 'insert into table1', выполнение сразу же переходит в блок catch. Так что это не «откат», а «операция никогда не выполняется». –