gpt4 book ai didi

sql-server - TSQL:在触发器中 try catch 事务

转载 作者:行者123 更新时间:2023-12-02 07:26:18 27 4
gpt4 key购买 nike

我正在尝试使用 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 block 捕获到某些内容,我不希望触发器失败。目前,我收到错误“事务在触发器中结束。批处理已中止。”如果交易失败。如何让触发器优雅地失败?

<小时/>

此外,如果我删除该事务,我会收到错误“事务在触发器中注定失败。批处理已中止。”。

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

有什么办法可以解决这个问题吗?

最佳答案

根据我的经验,触发器中的 try catch 中捕获的任何错误都会回滚整个事务;您也许可以使用保存交易。我认为您需要查看“Some more sql”中发生的情况,并确定是否可以在其周围编写 case/if 语句来阻止错误。

根据您正在做的事情,您可以使用 save transaction并在 catch 中捕获它

在你的代码中是这样的

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

关于sql-server - TSQL:在触发器中 try catch 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/884334/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com