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 中不会出现啊,为什么??事务中的SQL语句不需要declare和exec吗?
if(select Age from Emp where Code='1')>35 
select Age from Emp where Code='1' 这条语句在这里会执行吗?不需要exec ? where Code='1' 加单引号和不加有什么区别?

解决方案 »

  1.   

    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 
    Code='1' 加单引号和不加有什么区别?
    加,为字符串型数据,
    不加,为数值型型数据,
      

  2.   

    没懂什么意思不过,你這樣的寫法 if(select Age from Emp where Code='1')>35 
    假如code='1'查出的不是1笔记录(查不到,或者多余1笔),那就报错了
    也就下面的rollback和commit都执行不到。。语法上,你的语句没有问题。code='1' 要看你的code是什么类型,数值型?or 字符型?
    数值就不加
      

  3.   

    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 
      

  4.   

    事务中的SQL语句不需要declare和exec吗?
      

  5.   

    where Code='1' 加单引号和不加有什么区别?
    字符串就加''
    数值类型的就不加
      

  6.   

    正确的应该是下面的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 
      

  7.   

    直接的SQL更新查询,不需要exec,除非是动态拼接的SQL语句,才需要exec.变量定义才用declare.和sql语句无关.
      

  8.   

    大烏龜,數值類的字符在sql中 應該可以隱式轉換為數值類型吧
      

  9.   

    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 
    '1':字符串类型
     1 :数值类型