declare @orderno varchar(40)
--自定义聚合函数
CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
returns varchar(1000)
as
begin
declare @r varchar(1000)
set @r=''
select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
return(substring(@r,2,1000))
end
goselect orderno,dbo.joinlct(orderno) from rp_locat group by orderno
drop function joinlct提示function附近有语法错误
谢谢

解决方案 »

  1.   

    --自定义聚合函数
    CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
    returns varchar(1000)
    as
    begin
    declare @r varchar(1000)
    set @r=''
    select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
    return(substring(@r,2,1000))
    end
    goselect orderno,dbo.joinlct(orderno) from rp_locat group by orderno
    drop function joinlct這樣好象沒問題
      

  2.   

    是不是跟数据库的配置有关呀,
    还有就是, rp_locat 可以是数据库里的表吗
      

  3.   

    可以啊,rp_locat满足标示符规则
      

  4.   

    jolinkyo() ( ) 信誉:100    Blog  2006-10-05 09:36:00  得分: 0  
     
     
       去掉不行,说@orderno没定义
      
     
    --------------
    我說的去掉第一行是“--自定义聚合函数”這一句的前面那句代碼。
      

  5.   

    --自定义聚合函数
    CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
    returns varchar(1000)
    as
    begin
    declare @r varchar(1000)
    set @r=''
    select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
    return(substring(@r,2,1000))
    end
    goselect orderno,dbo.joinlct(orderno) from rp_locat group by orderno
    drop function joinlct這是完整代碼,我建立了測試環境測試的,沒有問題。我的是SQL2000。
      

  6.   

    dbo.joinlct(orderno)是個變量,要用如下方法:
    declare @sql varchar(1000)
    set @sql=' select orderno,' + dbo.joinlct(orderno)  + 'from rp_locat group by orderno
    drop function joinlct '
    exec(@sql)
      

  7.   

    更正一下:'from 要改為:' from 中間一定得有空格
      

  8.   

    DengXingJie(杰西) ,你根本沒有看懂那個函數的作用。
      

  9.   

    declare @r varchar(1000)
    set @r=''
    select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
    return(substring(@r,2,1000))------------------------------
    提一個問題,你用substring(@r,2,1000)字面上理解,@r的長度有可能超過1000,
    你定義的時候@r varchar(1000)
    會不會長度不夠?
    改成declare @r varchar(8000)看看
      

  10.   

    我的也是SQL2000,沒有問題的。杰西的方法是錯誤的。你運行下以下完整代碼,看看有沒有錯誤。為了避免誤刪除你的表,我新建了一個TEST表做測試。
    --建立測試環境
    Create Table TEST(orderno  varchar(40),lct  varchar(40))
    --插入數據
    Insert TEST Values(1,'a')
    Insert  TEST Values(1,'b')
    Insert  TEST Values(1,'c')
    GO
    --建立函數
    CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
    returns varchar(1000)
    as
    begin
    declare @r varchar(1000)
    set @r=''
    select @r=@r+','+ltrim(rtrim(lct)) from TEST where orderno=@orderno
    return(substring(@r,2,1000))
    end
    go
    --測試
    select orderno,dbo.joinlct(orderno) As lct from TEST group by orderno
    --刪除測試環境
    Drop Table TEST
    drop function joinlct
    --結果
    /*
    orderno lct
    1 a,b,c
    */
      

  11.   

    --头上那句declare @orderno varchar(40)去掉CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
    returns varchar(1000)
    as
    begin
    declare @r varchar(8000)  --try看看,也許能行:)
    set @r=''
    select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
    return(substring(@r,2,1000))
    end
    go
      

  12.   

    提示什麼錯誤?
    提示"function附近有语法错误" 嗎?
      

  13.   

    paoluo(一天到晚游泳的鱼)我运行了你那段,说“对象名TEST无效”
      

  14.   

    playwarcraft(时间就像乳沟,挤挤还是有的) 提示什麼錯誤?
    提示"function附近有语法错误" 嗎?
    是的啊
      

  15.   

    汗了,你create table test那段加上去了嗎?
    我的SQL2000,至少跑鱼老大的那段是沒有問題的orderno               lct
    -----------     -------------    
    1                    a,b,c
      

  16.   

    我运行了你那段,说“对象名TEST无效”---------------你是不是完整運行這段代碼的???不要刪除以下代碼的任何部分。--建立測試環境
    Create Table TEST(orderno  varchar(40),lct  varchar(40))
    --插入數據
    Insert TEST Values(1,'a')
    Insert  TEST Values(1,'b')
    Insert  TEST Values(1,'c')
    GO
    --建立函數
    CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
    returns varchar(1000)
    as
    begin
    declare @r varchar(1000)
    set @r=''
    select @r=@r+','+ltrim(rtrim(lct)) from TEST where orderno=@orderno
    return(substring(@r,2,1000))
    end
    go
    --測試
    select orderno,dbo.joinlct(orderno) As lct from TEST group by orderno
    --刪除測試環境
    Drop Table TEST
    drop function joinlct
    --結果
    /*
    orderno lct
    1 a,b,c
    */
      

  17.   

    總結一下,貌似你的SQL 查詢分析器,不認識create這個單詞,估計它4级沒過......狂汗
      

  18.   

    To:paoluo(一天到晚游泳的鱼)
    我是SQL的新手
    只我猜測:此函數是為了返回一些字段名,然後把此字段名放入Select語句中進行查詢
    如果是這樣的話,是查詢不到你想要的結果的,得到的結果是一字符串如果不對不要打人喲
      

  19.   

    哈哈,查询分析器里可以,存储过程中怎么会不行呢
    -------------
    function建在那,就不用寫在sp中了,
    存储过程中只要這一句就可以了
    select orderno,dbo.joinlct(orderno) from rp_locat group by orderno
      

  20.   

    DengXingJie(杰西) ,的確是理解的不正確,運行下我那段代碼,你就明白了。
      

  21.   

    function不是建在存储过程中吗?
      

  22.   

    jolinkyo() ( ) 信誉:100    Blog  2006-10-05 10:40:00  得分: 0  
     
     
       function不是建在存储过程中吗?
      
     
    ----------暈,當然不是的。
      

  23.   

    哈哈,我将function建在“用户定义的函数”里就ok了
      

  24.   

    说了半天,原来楼主是把函数建在存储过程里了啊~!my god