各位大哥大姐
看看这段存储过程有什么问题CREATE PROCEDURE LB_XL
(
@i_tabname varchar(30),           --表名
@i_bhzid varchar(8),                 
@i_mj varchar(30)  output                    --面积
)
AS set @sql2= 'update AA set '+@i_mj+'=
        (select sum(aa) as area from '+@i_tabname+' where (bb='+@c_lb+') and (cc='+@i_bhzid+'))  
             where (bb='+@c_lb+') and (cc='+@i_bhzid+')'                       
exec(@sql2)其中@i_tabname 是表名变量
@i_mj 是要更新的字段名(能做变量不),每次执行时传入的字段都不同该字段在数据库中的类型是float,

解决方案 »

  1.   

    错误信息是什么?
    bb和cc是什么类型?
      

  2.   

    您那提示出错了吗???语法上好像没错,您那@c_lb和@i_bhzid是什么类型,如果不是字符型要用CONVERT或CAST转换
    还有bb,cc的类型跟@c_lb和@i_bhzidCAST值的类型是不是一致。??
      

  3.   

    bb和cc都是varchar,bb用cast转换了都转换成了字符型了cc是输入的字符,@c_lb和@i_bhzid都是字符型的
    没有任何的错误提示信息,就是没有运行结果,不知道为啥?
      

  4.   

    varchar应该再加上一对单引号,比如
    ' where (bb='+@c_lb+') and 应该改成
    ' where (bb='''+@c_lb+''') and
      

  5.   

    没有运行结果肯定是where后面的条件问题了,没有要更新的记录当然不会有结果了
      

  6.   

    set @sql2='select @b=sum(aa) from '+@i_tabname+ ' where   (bb='+@c_lb+') and (cc='+@i_bhzid+')'
     exec sp_executesql @sql2,N'@b float output',@i_mj1 output
    set @sql3= 'update AA set '+@i_mj+'='+cast(@i_mj1 as varchar(30))+'  where (bb='+@c_lb+') and (cc='+@i_bhzid+')'
    exec(@sql3)我改成上面的这样了
    @i_mj1 float(8)
    在调试过程中 @i_mj1中有数据证明set @sql3=...之前是对的,现在就是没有把数据update进去
    不知道为啥?
      

  7.   

    先把exec(@sql12) 改成 print(@sql2) 
    把sql语句先弄出来看看。
      

  8.   

    print出来的语句直接能在查询分析器中执行,没有任何错误我现在改成这样还是不行
     update AA set @i_mj=cast(@i_mj1 as varchar(20)) where (bb=@c_lb) and (cc=@i_bhzid)
    没有结果
      

  9.   

    使用存储过程单步跳时应该很容易发现问题,不过微软的sql server 2000只允许在本地进行单步调试.