try ... catch中的SQL事务不会回滚

时间:2014-01-06 15:10:21

标签: sql tsql transactions try-catch rollback

我正在学习使用SQL中的Try ... Catch and Transactions,我试图在我拥有的一些数据上测试它。从我所学到的一个执行失败,然后catch应该回滚整个批处理,因此TRY部分中的所有表都不应该更新,但是,当我运行它时,它会抛出@b表中的错误catch块,但它仍然会插入@a表的值

SET XACT_ABORT ON;

Begin Try
  Begin Transaction s1
    Insert Into @a
      Values(@CountryId,@Country,@CountryCode,@DisplayImage,0,@ContinentCode,40)
    Insert Into @b
      Values('xxxxx',@ContinentCode,@Continent,0) --ERROR   
  Commit Transaction
End Try
Begin Catch
  Select ERROR_NUMBER(),ERROR_MESSAGE()
  Rollback Transaction s1
End Catch

select * from @a
select * from @b

CATCH BLOCK运行,我看到了error_number和error_message,但第一个插件是否应该回滚?

1 个答案:

答案 0 :(得分:1)

变量和表变量不是数据修改的一部分,因此它们不会回滚。 事务中的回滚或保存正在进行数据修改。在您的代码中使用临时表而不是表变量。它会起作用。