为什么要回滚而不是通过在catch子句中写入return来退出会话?

3lxsmp7m  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(226)

也许我在想具体的问题,但我无法得到一个令人满意的答案以下问题:
如果我有一个包在try块中的事务,它可能会失败,并且我希望回滚,那么我是否可以或不应该通过catch块中的返回退出?据我所知,如果会话退出,sql server仍会回滚该事务。
这样的存储过程将通过ssis包执行。
我必须发出回滚吗?ssis可能会等待更长时间的返回。。。
结构如下:

  1. CREATE PROCEDURE [example]
  2. AS
  3. SET NOCOUNT, XACT_ABORT ON; --Best Practise: messages from SP are are disabled; XACT_ABORT every failure results in rollback;
  4. BEGIN TRY
  5. ---------------------------------------------------------------------------------------------------------
  6. BEGIN TRANSACTION
  7. ---------------------------------------------------------------------------------------------------------
  8. -----------------Update---------------------------------------------------------------------------------
  9. UPDATE [example]
  10. -----------Inserts---------------------------------------------------------------------------------------
  11. INSERT INTO [Stg].[example]
  12. ---------------------------------------------------------------------------------------------------------
  13. COMMIT TRANSACTION
  14. ---------------------------------------------------------------------------------------------------------
  15. ---------------------------------------------------------------------------------------------------------
  16. END TRY
  17. ---------------------------------------------------------------------------------------------------------
  18. BEGIN CATCH
  19. ---------------------------------------------------------------------------------------------------------
  20. IF @@TRANCOUNT > 0
  21. BEGIN
  22. ROLLBACK TRANSACTION
  23. END;
  24. --------------------------------------------------------------------------------------------------------
  25. END CATCH
  26. SET NOCOUNT, XACT_ABORT OFF;

我的另一个选择是:

  1. BEGIN CATCH
  2. RETURN
  3. END CATCH

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题