create table tb_city
                     {
                       cityID int ,
                       ProvinceName varchar(50),
                       cityName varchar(50)
                     } 
             
   然后执行以下事物 
            begin tran
              insert into tb_city values(1,'江苏','南京')
            rollback tran    执行以后系统提示:
         无法回滚tran,找不到该名称的事物或保存点
     这是啥回事呀,应该是回滚了反而没有回滚,却插入了一个记录,上面的提示是什么问题呢,请高手指教一下,还有嵌套事务是啥回事呢,如果嵌套里面的事物回滚了,是不是整个事物都要回滚了?            

解决方案 »

  1.   

    楼主用的什么数据库啊? create 是{}, 而不是圆括号()的
      

  2.   

    sorry写错了,Sql2005的数据库,对是用小括号.
      

  3.   

      
      begin tran tran1
         begin  tran tran2
           insert into tb_city(1,'江苏','连云港')
         commit  tran tran2
         begin tran tran3
           insert into tb_city(2,'江苏','南京')
         rollback tran tran3
      commit tran tran1我执行后老出错
      

  4.   


         begin tran tran1 
        begin  tran tran2 
        insert into tb_city values(1,'江苏','连云港') 
        commit  tran 
        begin tran tran3 
        insert into tb_city values(2,'江苏','南京') 
        rollback tran 
      

  5.   


    if OBJECT_ID('tb_city')is not null 
        drop table  tb_city
    go
    create table tb_city 
                        (
                          cityID int , 
                          ProvinceName varchar(50), 
                          cityName varchar(50) 
                        )
           begin tran 
                  insert into tb_city values(1,'江苏','南京') 
                rollback tran          
         begin tran tran1 
        begin  tran tran2 
        insert into tb_city values(1,'江苏','连云港') 
        commit  tran 
        begin tran tran3 
        insert into tb_city values(2,'江苏','南京') 
        rollback tran tran1
      select * from  tb_city
      

  6.   

    进过了n次测试以后,明白了。rollback 就会把@@trancount 刷新为0,下面的commit tran就会提示没有对应的begin tran 。提交事务是由 @@trancount 由 1变成0时才作为一个整的事物的完整执行。嵌套多了,会出现很多控制的问题。
      

  7.   

    事物点,不知道哦。去研究一下,锁也很难理解的,需要下功夫了,thank you