小编Adi*_*Adi的帖子

忽略触发器中的错误

我有一个存储过程,在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)

sql-server triggers transactions try-catch

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

sql-server ×1

transactions ×1

triggers ×1

try-catch ×1