积极答复者
IMPLICIT_TRANSACTIONS 事务问题

问题
-
USE Northwind; SET NOCOUNT ON ; SET IMPLICIT_TRANSACTIONS ON ; PRINT ' trancount before begin tran: ' + CAST ( @@TRANCOUNT AS VARCHAR ( 10 )) BEGIN TRAN PRINT ' trancount after begin tran : ' + CAST ( @@TRANCOUNT AS VARCHAR ( 10 )) UPDATE dbo.Customers SET Country = ' China ' WHERE CustomerID = ' WHITC ' UPDATE dbo.Customers SET Country = ' China ' WHERE CustomerID = ' VINET ' PRINT ' trancount after updated tran : ' + CAST ( @@TRANCOUNT AS VARCHAR ( 10 ))
结果:
trancount before begin tran:0
trancount after begin tran :2
trancount after updated tran :2
请问在执行BEGIN TRAN之后为什么得到的trancount 为 2 ?
在关闭隐式事务后,则BEGIN TRAN得到trancount 为 1。
答案
-
一个是隐式事务,一个是显式事务。
第一个输出为0,是因为隐式事务还没有开始,一个连接的隐式事务开始点在该连接的第一个语句后,这里是在Begin Tran后开始。
后面输出未2,是一个隐式事务+一个显式事务所以是2。- 已标记为答案 Hong-Gang Chen - MSFTModerator 2010年1月12日 6:47
-
Begin Tran使得@@trancount增加2,Begin Tran产生一个,隐式事务产生一个。
- 已标记为答案 Hong-Gang Chen - MSFTModerator 2010年1月12日 6:46
全部回复
-
一个是隐式事务,一个是显式事务。
第一个输出为0,是因为隐式事务还没有开始,一个连接的隐式事务开始点在该连接的第一个语句后,这里是在Begin Tran后开始。
后面输出未2,是一个隐式事务+一个显式事务所以是2。- 已标记为答案 Hong-Gang Chen - MSFTModerator 2010年1月12日 6:47
-
Begin Tran使得@@trancount增加2,Begin Tran产生一个,隐式事务产生一个。
- 已标记为答案 Hong-Gang Chen - MSFTModerator 2010年1月12日 6:46