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

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

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

CREATE PROCEDURE [example]
AS

SET NOCOUNT, XACT_ABORT ON;  --Best Practise: messages from SP are are disabled; XACT_ABORT every failure results in rollback;

BEGIN TRY
---------------------------------------------------------------------------------------------------------
    BEGIN TRANSACTION
---------------------------------------------------------------------------------------------------------

 -----------------Update---------------------------------------------------------------------------------

    UPDATE [example]

-----------Inserts---------------------------------------------------------------------------------------

        INSERT INTO [Stg].[example]

---------------------------------------------------------------------------------------------------------
    COMMIT TRANSACTION
--------------------------------------------------------------------------------------------------------- 

---------------------------------------------------------------------------------------------------------
END TRY 
---------------------------------------------------------------------------------------------------------
BEGIN CATCH
---------------------------------------------------------------------------------------------------------
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION
END;

-------------------------------------------------------------------------------------------------------- 
END CATCH

SET NOCOUNT, XACT_ABORT OFF;

我的另一个选择是:

BEGIN CATCH

RETURN

END CATCH

暂无答案!

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

相关问题