none
IMPLICIT_TRANSACTIONS 事务问题 RRS feed

  • 问题

  • 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。
    2010年1月6日 8:29

答案

全部回复

  • 一个是隐式事务,一个是显式事务。
    第一个输出为0,是因为隐式事务还没有开始,一个连接的隐式事务开始点在该连接的第一个语句后,这里是在Begin Tran后开始。
    后面输出未2,是一个隐式事务+一个显式事务所以是2。
    2010年1月7日 0:59
  • 一个是隐式事务,一个是显式事务。
    第一个输出为0,是因为隐式事务还没有开始,一个连接的隐式事务开始点在该连接的第一个语句后,这里是在Begin Tran后开始。
    后面输出未2,是一个隐式事务+一个显式事务所以是2。
    还是没明白为什么为是 2 ,begin tran 使得 @@trancount 增加1,另外的一个 1 是哪个语句产生的呢 ?
    2010年1月7日 2:37
  • Begin Tran使得@@trancount增加2,Begin Tran产生一个,隐式事务产生一个。
    2010年1月7日 9:14
  • 非常谢谢
    2010年1月13日 3:33