Откат и подъем, который первый?
Иногда я выполняю следующий набор инструкций в следующем порядке:
Raiseerror(...)
Rollback;
Но мне интересно, вызывает ли это тот же эффект, что и ниже:
Rollback;
Raiseerror(...)
Я понимаю, что они одинаковы и вызывают одинаковый эффект. Делая откат сначала, после выполнения он продолжает выполняться на следующей строке, то есть Raiseerrror(...)
Может ли кто-нибудь подтвердить это? или предпочтительнее выполнить этот набор инструкций конкретным способом?1 ответ:
Было бы важно, если бы вы находились в блоке TRY-CATCH - raiserror перенаправлял бы выполнение в блок catch, поэтому, если откат пришел после него (в блоке try), то он не выполнялся бы.
Также это будет зависеть от серьезности ошибки-серьезность 20+ завершает соединение с базой данных.
Хороший шаблон для использования-это что-то вроде
begin try begin transaction; -- do stuff commit transaction; end try begin catch declare @ErrorMessage nvarchar(max), @ErrorSeverity int, @ErrorState int; select @ErrorMessage = ERROR_MESSAGE() + ' Line ' + cast(ERROR_LINE() as nvarchar(5)), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); if @@trancount > 0 rollback transaction; raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState); end catch