我目前对TSQL中嵌套事务的理解是,如果你有多个事务(几个事务嵌套在一个"外部"事务中),所有的事务都必须提交("外部"事务是最后一个事务)要对数据库进行更改.如果提交的数量小于打开的事务数,则不会进行与任何事务相关的更改.这是嵌套事务如何工作的正确概述吗?
Mic*_*son 13
你的描述COMMIT是正确的.
Kalen Delaney有一篇文章涵盖了您描述的相同类型的行为.
但是,正如Kalen的文章中所讨论的,ROLLBACK嵌套事务中的内容将回滚整个外部事务,而不仅仅是回滚发生的内部事务.
请注意以下结果:
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
ROLLBACK TRAN
SELECT @@trancount
Run Code Online (Sandbox Code Playgroud)
这在MSDN文章嵌套事务中描述:
没有事务名称的ROLLBACK WORK或ROLLBACK TRANSACTION语句回滚所有嵌套事务并将@@ TRANCOUNT减少为0.使用一组嵌套事务中最外层事务的事务名称的ROLLBACK TRANSACTION回滚所有嵌套的事务并将@@ TRANCOUNT递减到0.当您不确定是否已经在事务中时,请选择@@ TRANCOUNT以确定它是否为1或更多.如果@@ TRANCOUNT为0,则表示您不在交易中.