TSQL:触发/回滚事务错误

Posted

技术标签:

【中文标题】TSQL:触发/回滚事务错误【英文标题】:TSQL: Trigger / ROLLBACK TRANSACTION error 【发布时间】:2012-03-05 23:23:45 【问题描述】:

我在 TSQL 中有一个触发器,我想做两件事:

    如果“Locked”列为 TRUE,则应该 ROLLBACK TRANSACTION

    这样做时应该优雅地失败

    AFTER UPDATE 
    AS
    BEGIN
     IF (SELECT COUNT(*) FROM deleted WHERE Locked = 1)>0
     ROLLBACK TRANSACTION
    END
    

当前代码回滚不需要的事务,但当它回滚时会返回此错误:“事务在触发器中结束。批处理已中止。”

有没有办法在触发器中回滚事务并优雅地失败?

谢谢。

【问题讨论】:

【参考方案1】:

我想您可以更改为 INSTEAD OF 触发器,并选择执行或不执行更新,但它的代码更多,因为您必须手动执行更新。

【讨论】:

您好彼得,感谢您的建议。您能否进一步详细说明我将如何执行或不执行更新?我对 SQL 比较陌生,因此感谢您的帮助。谢谢! 是的,after 触发器只是在操作之后调用,而不是触发器也必须自己执行操作。此链接可能会有所帮助:link.

以上是关于TSQL:触发/回滚事务错误的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 回滚和触发

关于oracle 触发器,与事务回滚

mybatis 手动/自动触发事务回滚

(转)spring异常抛出触发事务回滚策略

TSQL 数据类型转换

TSQL--临时表和表变量