令人惊讶的是,我找不到任何与我遇到的问题相关的解释或文献。
针对这些 SQL 语句的情况:
SELECT 1 AS Test INTO #tmpTest
BEGIN TRAN
SELECT 1 AS Test INTO #tmpTest
ROLLBACK TRAN
逐行执行时,第3行的
SELECT ... INTO
失败,如预期,出现以下错误信息:
数据库中已经存在名为“#tmpTest”的对象。
但是,在此之后,第4行的ROLLBACK
语句失败,出现以下错误:
ROLLBACK TRANSACTION 请求没有相应的 BEGIN TRANSACTION。
即使事务在第2行已经成功BEGIN
。
我看过SQL Server - transactions roll back on error?,但答案不适用于此处,因为默认的xact_abort
为off
。此外,Quassnoi的答案与Raj More的答案相矛盾。
到底是什么原因呢?