代码如下: begin tran 
update Emp set Age=Age+1 where Code=1 if(select Age from Emp where Code=1)>35 
begin 
print '事务回滚' 
rollback tran 
end 
else 
begin 
print '事务成功执行' 
commit tran 
end
执行好后,我关闭sqlserver2005时,就出现 
有未提交的事务,是否要在关闭窗口之前提交这些事务。 
可是在SqlServer2000 中不会出现啊,为什么??

解决方案 »

  1.   


    没少啊!第一个begin是说明开始事务,不需要end,对应的是commit tran 
      

  2.   

    不好意思发错了。是这段事务有问题。begin tran
    update Emp set Age=Age+1 where Code=1

    save tran aabb   
    update Emp2 set Age=Age+1 where Code=1
    if(select Age from Emp2 where Code=1)>35
    begin
    print '回滚一部分事务'
    rollback tran aabb  
    end
    else
    begin
    print '事务成功执行'
    commit tran
    end
      

  3.   


    那这段代码怎么改啊!begin tran 
    update Emp set Age=Age+1 where Code=1 save tran aabb  
    update Emp2 set Age=Age+1 where Code=1 
    if(select Age from Emp2 where Code=1)>35 
    begin 
    print '回滚一部分事务' 
    rollback tran aabb  
    end 
    else 
    begin 
    print '事务成功执行' 
    commit tran 
    end
      

  4.   

    是c#还是t-sql?
    if(select Age from Emp where Code='1')>35 select Age from Emp where Code='1' 这条语句在这里会执行吗?不需要exec 或 cmd.executescalar?
      

  5.   

    begin tran
    update Emp set Age=Age+1 where Code=1save tran aabb 
    update Emp2 set Age=Age+1 where Code=1
    if(select Age from Emp2 where Code=1)>35
    begin
          print '回滚一部分事务'
          rollback tran aabb    --这里只是回滚到了aabb标签处,前面的事务还未提交      commit tran     --这里才是处理最开始的事务.
    end
    else
    begin
           print '事务成功执行'
           commit tran
    end
      

  6.   


    参考
    Create proc RegisterUser 
    (@usrName varchar(30), @usrPasswd varchar(30),@age int,@sex varchar(10), @PhoneNum varchar(20), @Address varchar(50) ) 
    as begin 
    begin tran 
    insert into userinfo(userName,userPasswd) values(@usrName,@usrPasswd) 
    if @@error<>0 
    beginrollback tranreturn -1 
    end 
    insert into userdoc(userName,age,sex,PhoneNumber,Address)values(@Usrname,@age,@sex,@PhoneNum,@Address) 
    if @@error<>0 
    beginrollback tran 
    return -1  
    endcommit tran 
    return 0 
    end 
      

  7.   


    begin tran
    update Emp set Age=Age+1 where Code=1save tran aabb 
    update Emp2 set Age=Age+1 where Code=1
    if(select Age from Emp2 where Code=1)>35
    begin
          print '回滚一部分事务'
          rollback tran aabb    --这里只是回滚到了aabb标签处,前面的事务还未提交
          end
    else
    begin
           print '事务成功执行'
           commit tran aabb    
    end
    commit tran     --这里才是处理最开始的事务.
      

  8.   


    Begin tran 
    update Emp set Age=Age+1 where Code=1 if exists (select 1 from Emp where Code=1 and Age > 35) 
    begin 
    print '事务回滚' 
    rollback tran 
    end 
    else 
    begin 
    print '事务成功执行' 
    commit tran 
    end 你這樣的寫法 if(select Age from Emp where Code='1')>35 
    假如code='1'查出的不是1笔记录(查不到,或者多余1笔),那就报错了 
    也就下面的rollback和commit都执行不到。。 begin tran 
      update Emp set Age=Age+1 where Code=1 if(select Age from Emp where Code=1)>35 
      begin 
          print '事务回滚' 
          rollback tran 
      end 
    else 
      begin 
          print '事务成功执行' 
      end commit tran --这里commit