小编use*_*839的帖子

sql try/catch rollback/commit - 防止回滚后的错误提交

我正在尝试编写一个具有事务和try/catch块的MS sql脚本.如果它捕获异常,则回滚事务.如果不是,则提交事务.我看过几个不同的网站说这样做:

begin transaction
begin try
    --main content of script here
end try
begin catch
    rollback transaction
end catch

commit transaction
Run Code Online (Sandbox Code Playgroud)

但即使在捕获异常的情况下,我们仍然不会点击"提交事务"行吗?这不会导致SQL错误,因为事务已经回滚了吗?我认为应该这样做:

declare @success bit = 1

begin transaction
begin try
    --main content of script here
end try
begin catch
    rollback transaction
    set @success = 0
end catch

if(@success = 1)
begin
    commit transaction
end
Run Code Online (Sandbox Code Playgroud)

普遍发布的解决方案如何不包含@success变量?提交已经回滚的事务是否没有发生sql错误?我是否错误地说在捕获异常的情况下仍然会遇到第一个代码示例的"提交事务"行?

sql sql-server transactions exception try-catch

47
推荐指数
3
解决办法
9万
查看次数

标签 统计

exception ×1

sql ×1

sql-server ×1

transactions ×1

try-catch ×1