Откат и подъем, который первый?


Иногда я выполняю следующий набор инструкций в следующем порядке:

Raiseerror(...)
Rollback;

Но мне интересно, вызывает ли это тот же эффект, что и ниже:

Rollback;
Raiseerror(...)
Я понимаю, что они одинаковы и вызывают одинаковый эффект. Делая откат сначала, после выполнения он продолжает выполняться на следующей строке, то есть Raiseerrror(...) Может ли кто-нибудь подтвердить это? или предпочтительнее выполнить этот набор инструкций конкретным способом?
1 3

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