书上说的事务包括以下几种类型:
:自动提交事务:SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。
:隐性事务:打开隐性事务:set implicit_transactions on,当以隐性事务模式操作时,SQL Servler将在提交或回滚事务后自动启动新事务。无法描述事务的开始,只需要提交或回滚事务。
:显式事务:用begin transaction明确指定事务的开始。我的问题:
对于种和种,自动处理事务和显示事务,我是能理解的。对于第种隐性事务,我就简直连语句都读不通--------------当以隐性事务模式操作时,SQL Servler将在提交或回滚事务后自动启动新事务。无法描述事务的开始,只需要提交或回滚事务。
读不懂..提交或回滚事务后自动启动新事务?啥意思啊
请指点..谢谢!!!

解决方案 »

  1.   

    就是说,你不需要写begin tran就可以自动进入事务,一旦commit /rollback的话,下面的语句或者过程就作为一个新的事务开始。不过我个人还是建议显式编写事务,这样可读性较高,同时也不容易错误,就像begin /end 这些本来是一对的,就应该一起出现。
      

  2.   

    commit /rollback后面的语句本身就是一个新的事务啊?
    还是不是很明白,能否举个小点的例子看看
      

  3.   

    显式使用那个是常规使用,你应该看得懂。
    隐式使用的第二个update语句,如果不成功,需要回滚,那么第一个update语句不受影响,因为不在同一个事务中。
    --显式使用
    begin tran
    update x
    set a=xx
    commit--隐式使用
    update x
    set a=xx
    commit/rollbackupdate b
    set abc=asdf
    commit/rollback
      

  4.   

    第一个update语句不受影响,因为不在同一个事务中?不在同一个事务中,本来就应该不受影响吧,这和隐式事务有关系吗?
    设置隐式事务不是有一个SET IMPLICIT_TRANSACTIONS吗?那如何设置,会影响到上一个事务呢?
      

  5.   

    第一个语句只是告诉你常规写法。下面那两个update语句才是隐式写法。如果你没开启SET IMPLICIT_TRANSACTIONS的话,那么默认那两个update是一个事务,如果回滚,两个update都会无效。如果按你上面说的开启这个之后就只影响两个commit/rollback之间的那个事务的话,那“隐式转换”里面的例子中,第二个update的回滚不影响上一个update的结果。为了避免这种混淆,所以我刚才才说,最好还是显式定义,我没试过隐式是在哪里配置的,我只是解释你的那个疑问而已。有些东西虽然可用,但是最好不要用,