Mar*_*lli 6 sql-server transaction sql-server-2014
当我运行以下脚本时:
begin transaction
select XACT_STATE()
select @@TRANCOUNT
begin transaction
select XACT_STATE()
select @@TRANCOUNT
begin transaction
select XACT_STATE()
select @@TRANCOUNT
rollback
select XACT_STATE()
select @@TRANCOUNT
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
那么一个单一的回滚语句可以回滚任意数量的事务?
那么写以下内容是没有意义的:
while @@TRANCOUNT > 0
rollback
Run Code Online (Sandbox Code Playgroud)
Mar*_*ith 12
是的,提交和回滚在这方面表现不同。
提交只是减少@@trancount. 在达到零之前,没有实际提交任何内容。
回滚将始终回滚事务并设置@@trancount为零。
需要说明的是,无论@@trancount. SQL Server 中的嵌套事务是一个神话。请参阅 Paul Randal 的博客文章:
每天一个 SQL Server DBA 神话:(26/30) 嵌套事务是真实的。