日期:2014-05-18  浏览次数:20465 次

请教sql中自定义的这个函数为什么出错?
create   function   getskfse3(@gysdm   varchar(30),@syyf   smallint)   returns   float   as
begin
    declare   @result   float
    declare   @i   smallint
    declare   @sqltxt   varchar(1500)   /*问题出在这里*/
    set   @sqltxt= 'csye '
    if   @syyf=1   select   @result=isnull(csye,0)   from   qmye2006   where   dm=@gysdm  
    set   @i=1
    if   @syyf> 1   and   @syyf <=12
    begin
        while   @i <=@syyf  
        begin
            if   len(@sqltxt)> 0   set   @sqltxt=@sqltxt+ '+ '
            set   @sqltxt=@sqltxt+ 'zc '+convert(varchar,@i)+ '-sr '+convert(varchar,@i)+ '-xycj '+convert(varchar,@i)
            set   @i=@i+1
        end    
        select   @result=(@sqltxt)   from   qmye2006   where   dm=@gysdm  
    end
  return   @result
end

执行:
select   dbo.getskfse3( 'JDBE-000 ',12)
提示:
将数据类型   varchar   转换为   float   时出错。

我在调试的时候,返回   varchar   (1500)   也就是@sqltxt的值内容是:
csye+sr1-zc1-xycj1+sr2-zc2-xycj2+sr3...

本意是通过select   @result=@sqltxt  
我理想的结果应该是:
select   @result=csye+sr1-zc1-xycj1+sr2-zc2-xycj2+sr3   from   qmye2006   where   dm=@gysdm
得出结果返回的...现在出错,
应该是在select   @result=@sqltxt   这个部分,请教什么原因呢?用什么可以代替让sql执行?


------解决方案--------------------
在exec執行
------解决方案--------------------
好象是这样的 用的 exec( ' ')