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

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

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

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

  1. BEGIN TRY
  2. --Some More sql
  3. END TRY
  4. BEGIN CATCH
  5. return
  6. END CATCH

有没有办法解决

解决方法

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

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

在你的代码中这样的东西

  1. SAVE TRANSACTION BeforeUpdate;
  2. BEGIN TRY
  3. --Some More sql
  4. END TRY
  5. BEGIN CATCH
  6. ROLLBACK TRANSACTION BeforeUpdate;
  7. return
  8. END CATCH

猜你在找的MsSQL相关文章