sql-server – TSQL:Try-Catch Transaction in Trigger

前端之家收集整理的这篇文章主要介绍了sql-server – TSQL:Try-Catch Transaction in Trigger前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用Microsoft Server 2005在触发器中放置一个try-catch语句.
BEGIN TRANSACTION
BEGIN TRY
    --Some More sql
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
    IF (XACT_STATE()) = -1
    BEGIN
        ROLLBACK TRANSACTION;
    END;
END CATCH

问题是如果某些东西被try-catch块捕获,我不希望触发器失败.目前,我收到错误“事务在触发器中结束,批次已被中止”.如果事务失败.如何让触发器正常失败?

另外,如果我删除事务,我得到错误“事务注定在触发器中.批处理已被中止”.

BEGIN TRY
    --Some More sql
END TRY
BEGIN CATCH
    return
END CATCH

有没有办法解决

解决方法

在我的经验中,在触发器中捕获的任何错误将回滚整个事务;您可能可以使用保存事务.我想你需要看看在“一些更多的sql”中发生了什么,并确定是否可以在其周围编写case / if语句来停止错误.

你可能会根据你在做什么来使用一个save transaction并捕获它

在你的代码中这样的东西

SAVE TRANSACTION BeforeUpdate;
BEGIN TRY
        --Some More sql
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION BeforeUpdate;
        return
END CATCH

猜你在找的MsSQL相关文章