首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

:函数外测试对,自定义函数出错

2012-02-20 
请教高手:函数外测试对,自定义函数出错.在线等createfunctiongetNames(@Rsvarchar(100))returnsvarchar(40

请教高手:函数外测试对,自定义函数出错.在线等
create   function   getNames(@Rs   varchar(100))
returns   varchar(400)
as
Begin
declare   @Str   varchar(200),@i   int,@Splits   varchar(10),@Str_all   varchar(400)
set   @Splits= '| '
set   @Str_all= ' '

Set   @Rs   =   RTrim(LTrim(@Rs))
Set   @i   =   CharIndex(@Splits,@Rs)
begin
                                              While   @i   > =   1
    Begin
    select   @Str=Ename   from   employs   where   Ecardid=Left(@Rs,@i-1)
    set   @Str_all=@Str_all+@Str+ '| '
    Set   @Rs   =   SubString(@Rs,@i+1,Len(@Rs)-@i)
    Set   @i   =   CharIndex(@Splits,@Rs)
    End
  --RETURN(@Str_all)

    If   @Rs   <>   ' '

begin
    select   @Str_all=Ename   from   employs   where   Ecardid=@Rs

--RETURN(@Str_all)
end

            Return
              end
      RETURN(@Str_all)

End

总是提示我:标量值的函数中的   RETURN   语句必须含有参数。

这个函数的目的,就是把 '1001|1002|1003 '转换成 '姓名1|姓名2|姓名3 '
我单独测试

create   table   #t(strNames   varchar(400))
declare   @Rs   varchar(100),@Str   varchar(200),@i   int,@Splits   varchar(10),@Str_all   varchar(400)
set   @Splits= '| '
select   @Rs= '1001|1002|1003| '   --Sid=1
set   @Str_all= ' '
print   @Rs
--begin
Set   @Rs   =   RTrim(LTrim(@Rs))
Set   @i   =   CharIndex(@Splits,@Rs)

                                              While   @i   > =   1
    Begin
    --insert   into   ReceiveMail(Rcardid,Sid)   Values(Left(@Sql,@i-1),@Sid)
    select   @Str=Ename   from   employs   where   Ecardid=Left(@Rs,@i-1)
    --print   @Str
    set   @Str_all=@Str_all+@Str+ '| '
    --print   @Str_all


    Set   @Rs   =   SubString(@Rs,@i+1,Len(@Rs)-@i)
    Set   @i   =   CharIndex(@Splits,@Rs)
    End
    insert   into     #t   values(@Str_all)
    If   @Rs   <>   ' '
    --insert   into   ReceiveMail(Rcardid,Sid)   Values(@Sql,@Sid)
    select   @Str_all=Ename   from   employs   where   Ecardid=@Rs
            Return


这样是能成功从select   strNames   from   #t   取到我想要的东西
怎么写成函数就错啦,
谢谢!

[解决办法]
http://community.csdn.net/Expert/topic/5417/5417442.xml?temp=.6191217
[解决办法]
create function getNames(@Rs varchar(100))


returns varchar(400)
as
Begin
declare @Str varchar(200),@i int,@Splits varchar(10),@Str_all varchar(400)
set @Splits= '| '
set @Str_all= ' '

Set @Rs = RTrim(LTrim(@Rs))
Set @i = CharIndex(@Splits,@Rs)
begin
While @i > = 1
Begin
select @Str=Ename from employs where Ecardid=Left(@Rs,@i-1)
set @Str_all=@Str_all+@Str+ '| '
Set @Rs = SubString(@Rs,@i+1,Len(@Rs)-@i)
Set @i = CharIndex(@Splits,@Rs)
End
--RETURN(@Str_all)

If @Rs <> ' '

begin
select @Str_all=Ename from employs where Ecardid=@Rs

--RETURN(@Str_all)
end

--Return 去掉這裡
end
RETURN(@Str_all)

End


[解决办法]
倒数第四行return后一定要写个东西,或者是NULL,或者是 ' ',看你实际的逻辑,不能只有return

热点排行