问题可能出在了这个地方了:
 where id in (@tid)因为没有找到记录所以没有更新,因为IN这个语法要求是这样的(A,B,C)
但是你这里传进来的是一个字符串@TID,所以成了这样的了(A),是一个变量值了,而不是一个逗号表达式了,你可以改成And或者OR条件而不使用IN来修改这个问题

解决方案 »

  1.   

    但是 @tid 中的个数是不定的,用And或者or应该不可以,
    用我上面的代码试过,如果一个如:447 就可以,但两个以上就不行,如:'447''448'或447,448;
      

  2.   

    你可以使用字符串来拼一个Sql来达到这个目的的.因为你传进去的是一个字符串,一个字符串只是一个变量,而在IN()里面要求的是一个逗号表达式,比如本来应是这样的
    IN(447,448)而传一个字符串后却是这样的了:
    IN("447,448")这相当于是一个值,而不是两个值,所以就不对了.
      

  3.   

    存取过程改一下CREATE PROCEDURE ccgc @taa char(1),@tid char(20) AS declare @a varchar(100)set @sqlstr='update b1 set aa=' + @taa + ' where id in (' + @tid + ')'
    exec(@sqlstr)
    GO理论上这样可以
      

  4.   

    刚才没注意 
     hbxtlhx(平民百姓) ( ) 信誉:110    Blog   加为好友  2007-04-28 14:34:20  得分: 0  
     
     
       你可以使用字符串来拼一个Sql来达到这个目的的.因为你传进去的是一个字符串,一个字符串只是一个变量,而在IN()里面要求的是一个逗号表达式,比如本来应是这样的
    IN(447,448)而传一个字符串后却是这样的了:
    IN("447,448")这相当于是一个值,而不是两个值,所以就不对了.
      
     
    -----------------------------------------------
     hbxtlhx 已经说过了 呵呵   就是这道理