SQL函数返回两个值并在存储过程中分配给两个变量

时间:2016-01-05 11:23:38

标签: sql-server tsql

我想从函数中取回两个值,第一个值赋值给一个变量,第二个值赋值给另一个变量现在我通过传递返回类型参数来调用函数两次,例如@retType 1然后返回第一个值,如果@retType 2然后返回第二个值 但我需要两次打电话,但我的意思是只打电话给一次并获得两个值到两个变量是否可能?...

存储过程:

DECLARE @policy_effitive_st DATE  -- policy Period Start From
DECLARE @policy_effitive_end DATE -- calculated date  

SELECT
    @policy_effitive_end = policydatecalc(memberid)  --assign first column column1
    , @policy_effitive_end = policydatecalc(memberid) --assign second column column2
FROM
    member 

功能:

CREATE FUNCTION [owner].[policydatecalc]
     (@parm1 <datatpe> = <default>)
RETURNS TABLE
AS RETURN
  (
   DECLARE  @col1,@col2 date 
   --- calulation for dates logic here
  SELECT @col1,@col2   )

1 个答案:

答案 0 :(得分:1)

你需要创建一个像这样的表值函数(详见如何official MSDN or Technet documentation中定义表值函数的细节 - 它们非常好而且广泛! ):

CREATE FUNCTION dbo.policydatecalc
     (@NumberOfMonths INT = 1)
RETURNS @OutputTbl TABLE (DateValStart DATE, DateValEnd DATE)
AS 
BEGIN
    INSERT INTO @OutputTbl (DateValStart, DateValEnd)
    VALUES (SYSDATETIME(), DATEADD(MONTH, @NumberOfMonths, SYSDATETIME()));

    RETURN
END

然后你可以调用它并在存储过程中分配它的值,如下所示:

CREATE PROCEDURE dbo.SomeProcedure
AS 
BEGIN
    DECLARE @Start DATE, @End DATE

    SELECT
        @Start = DateValStart,
        @End = DateValEnd
    FROM
        dbo.policydatecalc(4)
END

函数声明定义了一个返回的表类型(以及该类型的变量) - 这就是调用函数时在存储过程中返回的内容。这与任何其他表一样 - 您可以从中进行选择,并将值分配给存储过程中的内部变量。