![](/img/trans.png)
[英]Is rollback required in SQL Server when transaction failed in commit tran statement
[英]Sql Server - Update Statement is locking the table when executed immediately after Rollback Transaction
我在我的程序中使用了带有 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;
在UPDATE
语句后添加COMMIT
或ROLLBACK
。 或者做ROLLBACK TRANSACTION
而不是ROLLBACK TRANSACTION T1
。
解释:
保存点会导致问题。 发生错误时,您正在回滚到保存点,但事务仍处于打开状态。 您还会收到关于 trancount 不匹配的错误。 更新是在从未提交的事务中完成的,因此锁定。 当程序结束时,交易仍处于打开状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.