Транзакция все еще открыта после отмены запроса - PullRequest
6 голосов
/ 03 января 2012

В SQL Server 2008 я использую такой шаблон:

begin transaction

begin try

/* do something */

end try

begin catch

if @@TRANCOUNT > 0
rollback

 DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int                              
  SELECT @ErrMsg = ERROR_MESSAGE(),                              
         @ErrSeverity = ERROR_SEVERITY()                              

  RAISERROR(@ErrMsg, @ErrSeverity,1)     

end catch

if @@TRANCOUNT > 0
commit transaction

когда я нажимаю кнопку «Отменить выполнение запроса» в Sql Server Management Studio, он отменяет запрос и оставляет транзакцию открытой.

Это предполагаемое поведение? Или есть ошибка в моем образце. Разве это не должно откатить транзакцию?

1 Ответ

9 голосов
/ 03 января 2012

ИМХО, это предполагаемое поведение.Когда вы отменяете запущенный запрос, если была открытая транзакция - он остается открытым до тех пор, пока вы явно не подтвердите или не откатите его ИЛИ , пока соединение не будет закрыто

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

Обновление:

Поведение контролируетсяпо опции SSMS Отключение после выполнения запроса - это означает, что запрос отключается после выполнения или отмены и откатывает открытые транзакции: enter image description here

...