select top 1 * from t1 where c1='c1' 
if @@rowcount=0 
begin 
  insert t1 values('c1','c2') 
end 
else  --如果加了 if @@rowcount>0 就不会执行update 语句(为什么????) 
begin 
  if @@rowcount>0
   update t1 set c2='c22' where c1='c1' 
end  

解决方案 »

  1.   

    else if @@rowcount>0没有else if的写法.
      

  2.   

    在else if @@rowcount>0的时候,@@rowcount已经是0了
      

  3.   

    兔子mm说得对。@@rowcount是反映前一条语句的影响行数。当执行 if @@rowcount=0 这句判断时,@@rowcount已经被置为0了。
      

  4.   

    当需要用@@rowcount做更加细致的分支时,可以用一个变量来存储。declare @rowcnt int
    select top 1 * from t1 where c1='c1'
    set @rowcnt=@@rowcountif @rowcnt=0
    --...
    else if @rowcnt>0
    --...
    else ...
      

  5.   

    我跟踪了一下:select top 1 * from t1 where c1='c1' 
    if @@rowcount=0 
    begin 
      print 'if'
      print @@rowcount
    end 
    else  --if @@rowcount>0 
    begin 
      print 'else'
      print @@rowcount 
    end  显示的是 else
            0
    就是不明白 什么时候改变了@@rowcount的值
      

  6.   

    在执行if @@rowcount=0的时候。
    这句判断将其置为0.
    诸如if这类不返回行的语句,都会将@@rowcount置为0.
    有些还会将 @@ROWCOUNT 值设置为 1,比如DECLARE CURSOR 和 FETCH。
    因此,@@rowcount要慎用。
      

  7.   

    以后要用@@rowcount的话,只能像楼上说的慎用
    要么就自己设置个变量 先把@@rowcount赋值一下
    不然的话,指不定又出现什么状况
    谢谢大家帮忙