我有这段代码:
begin transaction outside
go
begin transaction inside
go
print 'inside done'
commit transaction inside
update Action set IdUser = 9999999999999
commit transaction outside
由于外键问题,此代码故意在“update Action set IdUser = 999 ...”处抛出异常。
我希望在发生任何错误的情况下回滚。这就是为什么我有一个外部交易。在现实世界中,我有一个包含大量脚本的SQL文件,我想确保所有脚本都在事务中维护,所以我想将它包装在一个外部事务中。
上面的代码不起作用。它打印“内部完成”,然后抛出异常。这个印刷品可能是一个很大的插入。
发生了什么事?我该如何解决?
答案 0 :(得分:0)
使用以下模板尝试查询:
begin tran outside
begin try
begin tran inside
print 'inside done' --Insert\Update\Delete
Update Action set IdSuer = 999999999
END TRY
BEGIN catch
rollback tran inside
rollback tran outside
GOTO FINISH
END catch
commit tran inside
commit tran outside
:FINISH
print 'END'