我在过程中使用了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;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在语句后添加COMMIT或。或者代替。ROLLBACKUPDATEROLLBACK TRANSACTIONROLLBACK TRANSACTION T1
说明:
保存点导致问题。发生错误时,您将回滚到保存点,但该事务仍处于打开状态。您还会在帐户不匹配方面收到错误消息。更新是在从未提交的事务中完成的,因此将锁定。该过程结束时,该事务仍处于打开状态。