有一个SQL2000函数  我想返回两个值 然后在一句查询语句中调用,请问如何返回和调用 下面是函数create function dbo.tel_merger(@id varchar) returns varchar(8000)
as
begin
    declare @str_tel varchar(8000)
    declare @str_id varchar(8000)
    set @str_tel = ''
    set @str_id = ''
    select top 600 @str_tel = @str_tel + ',' + cast(sendtel as varchar),@str_id = @str_id + ',' + cast(id as varchar) from sms_sendhistory where ph = @id and state=0
    set @str_tel = right(@str_tel , len(@str_tel) - 1)
    set @str_id = right(@str_id , len(@str_id) - 1)
    return @str_tel
    return @str_id
end
go下面是调用语句,但只能调用其中一个,如何同时调用两个值啊?
select ph ,sendtel= dbo.tel_merger(ph) from sms_sendhistory group by ph
比如
select ph ,sendtel= dbo.tel_merger(ph),id=.... from sms_sendhistory group by ph

解决方案 »

  1.   

    还有这种return方法的呀 居然没报错?
    应该只返回第一个的值 后面的是非法的吧
      

  2.   

    return @str_tel+','+@str_id
      

  3.   

    return 表值函数吧...
    或者函数可以返回varchar(max)类型么?
      

  4.   

    表值函数如何写和调用啊,我下面写的 查出来是空值,请帮我看下问题出在哪?谢谢CREATE FUNCTION dbo.tel_merger_tb()
    RETURNS @tb TABLE(id int,sendtel varchar)
    as
    begin
        declare @str_tel varchar(8000)
        declare @str_id varchar(8000)    set @str_tel = ''
        set @str_id = ''
        select top 600 @str_id = @str_id + ',' + cast(id as varchar), @str_tel = @str_tel + ',' + cast(sendtel as varchar) from sms_sendhistory where state=0
        set @str_tel = right(@str_tel , len(@str_tel) - 1)
        set @str_id = right(@str_id , len(@str_id) - 1) 
    return
    end
    goselect * from dbo.tel_merger_tb() 
      

  5.   

    CREATE FUNCTION dbo.tel_merger_tb()
    RETURNS @tb TABLE(id varchar(8000),sendtel varchar(8000))
    as
    begin
        declare @str_tel varchar(8000)
        declare @str_id varchar(8000)    set @str_tel = ''
        set @str_id = ''
        select top 600 @str_id = @str_id + ',' + cast(id as varchar), @str_tel = @str_tel + ',' + cast(sendtel as varchar) from sms_sendhistory where state=0
        set @str_tel = right(@str_tel , len(@str_tel) - 1)
        set @str_id = right(@str_id , len(@str_id) - 1) 
        INSERT INTO @tb 
        SELECT @str_tel,@str_id 
    return
    end
    go
      

  6.   


    select ph ,
    sendtel = 
    (
    select top 600  ',' + cast(sendtel as varchar)
    from sms_sendhistory where ph = t.ph and state=0
    )
    ,str_id=
    (
    select top 600  ',' + cast(id as varchar)
    from sms_sendhistory where ph = t.ph and state=0
    )
     from sms_sendhistory t group by ph
      

  7.   

    CREATE FUNCTION dbo.tel_merger_tb()
    RETURNS TABLE
    as
    begin
        declare @str_tel varchar(8000)
        declare @str_id varchar(8000)    set @str_tel = ''
        set @str_id = ''
        select top 600 @str_id = @str_id + ',' + cast(id as varchar), @str_tel = @str_tel + ',' + cast(sendtel as varchar) from sms_sendhistory where state=0
        set @str_tel = right(@str_tel , len(@str_tel) - 1)
        set @str_id = right(@str_id , len(@str_id) - 1) 
            
        SELECT @str_tel as tel,@str_id  as ids
    return
    endgo
    select t.*,t1.tel,t1.ids
    (
    select ph  from sms_sendhistory group by ph
    )t,dbo.tel_merger_tb() t1
    go