Sql 为什么要回滚而不是通过在catch子句中写入return来退出会话?
也许我在想具体的问题,但我无法得到以下问题的满意答案: 如果我有一个事务,包装在一个try块中,它可能会失败,我希望回滚, 我是否可以或不应该通过挡块中的返回退出? 据我所知,如果会话退出,SQL SERVER无论如何都会回滚该事务 这样的存储过程将通过SSIS包执行 我必须发布回滚吗?SSI可能会等待更长时间的返回 结构如下:Sql 为什么要回滚而不是通过在catch子句中写入return来退出会话?,sql,transactions,return,try-catch,rollback,Sql,Transactions,Return,Try Catch,Rollback,也许我在想具体的问题,但我无法得到以下问题的满意答案: 如果我有一个事务,包装在一个try块中,它可能会失败,我希望回滚, 我是否可以或不应该通过挡块中的返回退出? 据我所知,如果会话退出,SQL SERVER无论如何都会回滚该事务 这样的存储过程将通过SSIS包执行 我必须发布回滚吗?SSI可能会等待更长时间的返回 结构如下: CREATE PROCEDURE [example] AS SET NOCOUNT, XACT_ABORT ON; --Best Practise: message
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