我正在尝试编写一个具有事务和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错误?我是否错误地说在捕获异常的情况下仍然会遇到第一个代码示例的"提交事务"行?