开发者社区 问答 正文

SQL Server-在回滚事务后立即执行更新语句时,该表将锁定表

我在过程中使用了try-catch块进行事务处理。如果发生任何异常,我将回滚事务,然后尝试更新结果(状态)表。但是,看起来Update语句正在锁定表(此后,该表上的Select查询不起作用)。

您能否让我知道这种行为的原因是什么?

这是我的示例代码:

ALTER PROCEDURE Test_Tran
AS
BEGIN
    BEGIN TRY
        BEGIN TRANSACTION
            SAVE TRANSACTION T1;
            SELECT 1 / 0;
        COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION T1;
        UPDATE [DI].[BOMLC_AMPL_DI_Async_Exec_Results]
            SET
                [End_Time] = GETDATE(),
                [Execution_Status] = 'FAILED',
                [Error_Number] = 16,
                [Error_Message] = 'Exception occurred while processing: '
                                    + ERROR_MESSAGE(),

                [Last_Updated_On] = GETDATE()

            WHERE [Token_ID] = 52;
        PRINT('Something went wrong');
    END CATCH

END
GO

EXEC Test_Tran;

展开
收起
祖安文状元 2020-01-05 14:47:24 599 分享 版权
1 条回答
写回答
取消 提交回答
  • 在语句后添加COMMIT或。或者代替。ROLLBACKUPDATEROLLBACK TRANSACTIONROLLBACK TRANSACTION T1

    说明:

    保存点导致问题。发生错误时,您将回滚到保存点,但该事务仍处于打开状态。您还会在帐户不匹配方面收到错误消息。更新是在从未提交的事务中完成的,因此将锁定。该过程结束时,该事务仍处于打开状态。

    2020-01-05 14:47:34
    赞同 展开评论