我正在学习使用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,但第一个插件是否应该回滚?
答案 0 :(得分:1)
变量和表变量不是数据修改的一部分,因此它们不会回滚。 事务中的回滚或保存正在进行数据修改。在您的代码中使用临时表而不是表变量。它会起作用。