如何从SQL中的用户定义函数返回多个值

时间:2015-10-11 18:25:54

标签: sql sql-server function user-defined-functions

需要帮助我创建的SQL user_defined函数。 我的函数应该根据我给出的项目编号返回项目的类型。 当我执行该函数时,我收到错误

  

“子查询返回的值超过1。当这个值不允许时   子查询跟随=,!=,<,< =,>,> =或当子查询用作   表达。“

我想我应该将此函数返回类型更改为表。但是我不知道怎么做。 这是我的功能:

create function [dbo].[fx_calculate_type](@item varchar)
returns varchar(10)
AS 
begin
DECLARE @type VARCHAR(10)
       ,@typeCount int
       ,@MaxYear int 
       ,@redoitem varchar(18)

set @type = ''
set @typeCount = (Select count(m.year) 
                  from mr m
                  where m.item_no = 'RR301') --@item  
set @MaxYear =   (Select Max(m.year) 
                  from mr m
                  where m.item_no = 'RR301') --@item  
set @redoitem =  (select redoitem 
                  from  mr m
                  where m.item_no = 'RR301') --@item   

       if (@redoitem is null or @redoitem= '')

      BEGIN 
      While (@typeCount>=1)
         Begin
         Continue 
            If @typeCount = 1
                Begin 
                set @type = 'N'
                   --return (@type )
                End
            Else 
                Begin
                set @type = @typeCount+ 'C'
                set @MaxYear =@MaxYear -1 --2014
                set @typeCount = @typeCount -1  --4
                  -- return (@type) 
                END
          END
       END 

       Else
          BEGIN 
      While (@typeCount>=1)
         Begin
         Continue 
            If @typeCount = 1
                Begin 
                set @type = 'N'
                   --return (@type)  
                End
            Else 
                Begin
                set @type = @typeCount+ 'R'
                set @MaxYear =@MaxYear -1 --2014
                set @typeCount = @typeCount -1  --4
                   --return (@type)  
                END
          END
       END
     return (@type) 
      END 

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

这对我有用!感谢

创建proc [dbo]。[type] @item varchar(10) 如 开始 DECLARE @type VARCHAR(10)        ,@ typeCount int
       ,@ MaxYear int        ,@ redoitem varchar(18)

设置@type ='' 设置@typeCount =(选择计数(DISTINCT m.year)                   从先生                   其中m.item_no = @item) - @ item

设置@MaxYear =(选择不同的最大值(m.year)                   从先生                   其中m.item_no = @item)

设置@redoitem =(选择前1个redoitem                   从先生                   其中m.item_no = @item)

IF(@redoitem为null或@ redoitem ='')BEGIN
    WHILE(@ typeCount> = 1)BEGIN

    IF @typeCount = 1 
        BEGIN 
    SET @type = 'N'     
    UPDATE mr  SET type =@type WHERE item_no = @item AND year = @MaxYear    
    END
    ELSE        
        BEGIN

        set @type = CONVERT(VARCHAR(10),@typeCount)+ 'C'    
        UPDATE mr  SET type =@type WHERE item_no = @item AND year = @MaxYear
        SET @MaxYear =@MaxYear -1

    END

        SET @typeCount = @typeCount -1  
    CONTINUE
END

结束

Else BEGIN 虽然(@ typeCount> = 1)开始

如果@typeCount = 1     开始     设置@type ='N'     UPDATE mr SET type = @ type WHERE item_no = @item AND year = @MaxYear 结束 其他     开始     设置@type = CONVERT(VARCHAR(10),@ typeCount)+'R'     UPDATE mr SET type = @ type WHERE item_no = @item AND year = @MaxYear     设置@MaxYear = @ MaxYear -1 - 2014     设置@typeCount = @typeCount -1 - 4

END

    CONTINUE
  END

END 结束