加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:24:38 所属栏目:MsSql教程 来源:网络整理
导读:我试图使用Microsoft Server 2005在触发器中放置一个try-catch语句. BEGIN TRANSACTIONBEGIN TRY --Some More SQL COMMIT TRANSACTIONEND TRYBEGIN CATCH IF (XACT_STATE()) = -1 BEGIN ROLLBACK TRANSACTION; END;END CATCH 问题是如果某些东西被try-catch块
我试图使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读