这种情况会发生什么?
SET XACT_ABORT ON
BEGIN TRANSACTION
---DO SOMETHING HERE THAT CAUSES AN ERROR
COMMIT TRANSACTION
if @@error != 0
raiserror('SP failed. Step 7.', 20, -1) with log GO
我的猜测是,因为XACT_ABORT
是ON
,COMMIT TRANSACTION
永远不会发生(因为整个事情被回滚并终止),最后一个语句也没有(检查@@error
1}}然后调用raiseerror
)。
答案 0 :(得分:3)
正确。
SET XACT_ABORT跳出批处理。您的IF是同一批次的一部分。
如果您想要对错误进行一些处理,请使用BEGIN TRY等
SET XACT_ABORT ON
BEGIN TRY
BEGIN TRANSACTION
---DO SOMETHING HERE THAT CAUSES AN ERROR
COMMIT TRANSACTION
END TRY
BEGIN CATCH
raiserror('SP failed. Step 7.', 20, -1) with log
END CATCH
GO
我也对严重程度20感兴趣,因为它打破了连接。通常你会使用16这是用户定义的错误。