create function F_Test(@parm char(20))
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+','+rtrim(name)
from table1
 go-----如果把此行和下面一行去掉则可正常运行,怪不怪?
return(stuff(@r,1,1,''))
end
或者就把go去掉.

解决方案 »

  1.   

    --哈哈, 楼主好豪爽哦。一申请就是8000, 好像系统最多就只能申请8000哦。
    create function dbo.F_Test(@parm char(20))
    returns varchar(8000)
    as
    begin
    declare @r varchar(8000)
    set @r=''
    select @r=@r+','+rtrim(content)
    from table1
    return(stuff(@r,1,1,''))
    end
    go
    -----如果把此行和下面一行去掉则可正常运行,怪不怪?
    print dbo.F_Test('asdf')
    go
    drop function dbo.F_Test
      

  2.   

    还有楼主运行时将:
    select @r=@r+','+rtrim(content)
    改为
    select @r=@r+','+rtrim(name)
    (因为我建的table1表的结构与你的不一样)
      

  3.   

    go后边不要加注释create function F_Test(@parm char(20))
    returns varchar(8000)
    as
    begin --A
    declare @r varchar(8000)
    set @r=''
    select @r=@r+','+rtrim(name)
    from table1
     
    return(stuff(@r,1,1,''))
    endgo   
    print dbo.F_Test('asdf')
    go 
    drop function F_Test
      

  4.   

    是不是编译器的一个小bug啊???
    困惑中......
      

  5.   

    select @r=@r+','+rtrim(name)
    from table1当Table1中有多条记录时能实现吗
      

  6.   

    select @r=@r+','+rtrim(name)
    from 不存在这个表---上面这行也成立,你说怪不怪???但一调用这个函数就出错了,---是不是这个东西不重要,‘别陷入语法的细节中去’???‘思想才是最重要的’???