事务嵌套

SQL Server 容许你嵌套事务,这个特性意味着,即使上一个事务没有完成,也能开启一个新事务。T-SQL容许你通过嵌套BEGIN TRAN嵌套事务。 内置变量@@TRANCOUNT可显示事务的嵌套层级。0表示没有嵌套,1表示嵌套一层,依此类推。

COMMIT提交本层事务,但是直到最外层的事务提交了,所有的改变才保存到磁盘。它仅仅时减小@@TRANCOUNT的值。ROLLBACK不论在那层都能回滚所有的事务。
当你开始一个事务,@@TRANCOUNT变量自动从0增加到1;当提交了数量减少1个。当回滚了,则数量减为0。正如你所见:COMMIT和 ROLLBACK并不对称。如果你嵌套事务,COMMIT一层较少1,如图1。ROLLBACK命令回滚所有事务如图2。COMMIT 和 ROLLBACK不同在于嵌套错误处理。

 图1:一个commit对应一个BeginTransaction,把@@Trancount数量减1。

图2:Rollback一直回滚整个事务

从图1和图2可以看出:你可以嵌套事务,使用@@TRANCOUNT检测嵌套的级别。也能了解COMMIT 和ROLLBACK不对称的特性。COMMIT减少@@TRANCOUNT的值, ROLLBACK让值变为0。只有最后一个COMMIT才真正提交事务。不管你嵌套多少事务,只有最后一个COMMIT起作用。

posted @ 2011-08-25 14:12  xfyn  阅读(619)  评论(0编辑  收藏  举报