Sql server TSQL中的嵌套事务

Sql server TSQL中的嵌套事务,sql-server,tsql,Sql Server,Tsql,嗨,我目前对TSQL中嵌套事务的理解是,如果您有多个事务(多个事务嵌套在一个“外部”事务中),则必须提交所有事务(其中“外部”事务是最后一个),才能对数据库进行任何更改。如果提交的数量小于打开的事务的数量,则不进行与任何事务相关的更改。这是嵌套事务工作原理的正确概述吗?您对COMMIT的描述是正确的 但是,正如Kalen的文章中所讨论的,嵌套事务中的回滚将回滚整个外部事务,而不仅仅是发生回滚的内部事务 注意以下结果: BEGIN TRAN SELECT @@trancount BEGIN TR

嗨,我目前对TSQL中嵌套事务的理解是,如果您有多个事务(多个事务嵌套在一个“外部”事务中),则必须提交所有事务(其中“外部”事务是最后一个),才能对数据库进行任何更改。如果提交的数量小于打开的事务的数量,则不进行与任何事务相关的更改。这是嵌套事务工作原理的正确概述吗?

您对
COMMIT
的描述是正确的

但是,正如Kalen的文章中所讨论的,嵌套事务中的
回滚将回滚整个外部事务,而不仅仅是发生回滚的内部事务

注意以下结果:

BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount

ROLLBACK TRAN
SELECT @@trancount
MSDN文章对此进行了描述:

回滚工作或回滚事务语句没有 事务名称回滚所有嵌套事务和递减 @@TRANCOUNT为0。使用该事务的回滚事务 一组嵌套事务中最外层事务的名称 回滚所有嵌套事务并递减@TRANCOUNT 到0。如果您不确定自己是否已在交易中,请选择 @@TRANCOUNT以确定它是否为1或更多。如果@TRANCOUNT为0,则 不在交易中


简言之,你的答案是肯定的。发件人:

SQL Server数据库将忽略提交内部事务 引擎。事务根据提交或回滚 在最外层事务结束时采取的操作。如果外部 事务已提交,内部嵌套事务也已提交 坚信的如果回滚外部事务,则所有内部事务 事务也会回滚,无论 内部事务是单独提交的

关于回滚,只允许回滚整个外部事务