我有一个存储过程,在Insert/Update/Delete的触发器内调用.
问题是该SP内部存在某个代码块并不重要.因此,我想忽略此代码块产生的任何错误.
我在TRY CATCH块中插入了这个代码块.但令我惊讶的是我收到了以下错误:
当前事务无法提交,也无法支持写入日志文件的操作.回滚交易.
然后我尝试使用SAVE&ROLLBACK TRANSACTION和TRY CATCH,它也因以下错误而失败:
当前事务无法提交,也无法回滚到保存点.回滚整个交易.
我的服务器版本是:Microsoft SQL Server 2008(SP2) - 10.0.4279.0(X64)
样本DDL:
IF OBJECT_ID('TestTrigger') IS NOT NULL
DROP TRIGGER TestTrigger
GO
IF OBJECT_ID('TestProcedure') IS NOT NULL
DROP PROCEDURE TestProcedure
GO
IF OBJECT_ID('TestTable') IS NOT NULL
DROP TABLE TestTable
GO
CREATE TABLE TestTable (Data VARCHAR(20))
GO
CREATE PROC TestProcedure
AS
BEGIN
SAVE TRANSACTION Fallback
BEGIN TRY
DECLARE @a INT = 1/0
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION Fallback
END CATCH
END
GO
CREATE TRIGGER TestTrigger
ON TestTable …Run Code Online (Sandbox Code Playgroud)