我写了一个函数,虽然可以创建但是无法运行,似乎在编写上还有很多问题,请大家帮我看看。create function khbl(@agent_code varchar(10)) returns decimal(17,2)
begin
declare @lives decimal(17,2)
if dbo.hty(@agent_code) <=2
select @lives = lives / dbo.hty(@agent_code) * 3 from prdtab_sh
else 
select @lives = lives from prdtab_sh declare @returnrate decimal(17,2)
if @lives < 9
set @returnrate = 0
else if @lives >= 9 and @lives <= 15
set @returnrate = 0.05
else 
set @returnrate = 0.09
return @returnrate
end
我的目的是希望在输入@agent_code后,能先做@lives的运行判断,然后在确保lives的分类后再得到需要的@returnrate的结果。
由于自己初写函数,可能在运用和嵌套上有很多问题,麻烦大家能按照需求帮我修改一下,谢谢

解决方案 »

  1.   

    基本没问题
    改一个地方减少一次函数调用create function khbl(@agent_code varchar(10)) returns decimal(17,2)
    begin
    declare @lives decimal(17,2)         declare @hty int                 --类型根据需要改
             set @hty=dbo.hty(@agent_code) if @hty <=2
    select @lives = lives / @hty * 3 from prdtab_sh
    else 
    select @lives = lives from prdtab_sh declare @returnrate decimal(17,2)
    if @lives < 9
    set @returnrate = 0
    else if @lives >= 9 and @lives <= 15
    set @returnrate = 0.05
    else 
    set @returnrate = 0.09
    return @returnrate
    end
      

  2.   

    select @lives = lives / dbo.hty(@agent_code) * 3 from prdtab_sh
    else 
    select @lives = lives from prdtab_sh
    --------------------------------------------------
    如果是多条的话这里会有问题.
      

  3.   

    用case when 也许能缩短你的代码,但是在性能上没有提高,可读性上则降低了,所以不建议改
      

  4.   

    dbo.hty(@agent_code)
    是什么,函数吗? if dbo.hty(@agent_code) <=2
    select @lives = lives / dbo.hty(@agent_code) * 3 from prdtab_sh
    else 
    select @lives = lives from prdtab_sh
    ----------------------------------------------------------------------------
    这里的变量@lives只能获取最后一行的数值,是要这样的结果吗?
    其他语句似乎没有问题?
      

  5.   

    有朋友说下面这个多条的话里会有问题
    select @lives = lives / dbo.hty(@agent_code) * 3 from prdtab_sh
    else 
    select @lives = lives from prdtab_sh我想问一下,会不会有问题,该怎么修改,请大家帮助我,谢谢
      

  6.   

    vivihaohao() ( ) 信誉:100    Blog   加为好友  2007-7-7 20:33:11  得分: 0  
     
     
       
    有朋友说下面这个多条的话里会有问题
    select @lives = lives / dbo.hty(@agent_code) * 3 from prdtab_sh
    else 
    select @lives = lives from prdtab_sh我想问一下,会不会有问题,该怎么修改,请大家帮助我,谢谢------------------------------------------------------
    1.保证这两句select都只返回一行数据,可以加where
    2.用游标逐行运算