理解嵌套事务SQL

理解嵌套事务SQL,sql,sql-server,tsql,transactions,Sql,Sql Server,Tsql,Transactions,我有以下代码: begin transaction outside go begin transaction inside go print 'inside done' commit transaction inside update Action set IdUser = 9999999999999 commit transaction outside 由于外键问题,此代码在更新操作集IdUser=999…时故意引发异常 如果发生任何错误,我希望回滚。这就是为什么我有一个外部交易。在现

我有以下代码:

begin transaction outside
go

begin transaction inside
go
print 'inside done'
commit transaction inside

update Action set IdUser = 9999999999999

commit transaction outside
由于外键问题,此代码在更新操作集IdUser=999…时故意引发异常

如果发生任何错误,我希望回滚。这就是为什么我有一个外部交易。在现实世界中,我有一个包含大量脚本的SQL文件,我想确保所有脚本都在一个事务中维护,所以我想将其包装在一个外部事务中

上面的代码不起作用。它在内部完成打印,然后抛出异常。这张照片可能是一个大插页


发生什么事了?如何解决此问题?

请使用以下模板尝试查询:

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'  

你想展开打印?我以打印为例。可能是插页。在现实世界中,它是插入/更新/删除。打印不是事务的一部分。插入、更新等可以是事务的一部分。在您的示例中,您会考虑什么样的行为?警告词:SQLServer具有支持嵌套事务的语法,但不支持功能。如果回滚内部事务,则此回滚将影响所有事务,直至层次结构的顶部。SQL Server实际上不支持嵌套事务!有关更多详细信息,请参阅