В 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, он отменяет запрос и оставляет транзакцию открытой.
Это предполагаемое поведение? Или есть ошибка в моем образце. Разве это не должно откатить транзакцию?