也许我在想具体的问题,但我无法得到一个令人满意的答案以下问题:
如果我有一个包在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
暂无答案!
目前还没有任何答案,快来回答吧!