存储过程返回多个值,但只需要一个

时间:2017-01-29 16:16:29

标签: sql sql-server tsql stored-procedures

我正在尝试构建一个似乎返回网格的存储过程。但我只需要该网格的第一列。下面是我用来调用过程的代码

125004

在结果选项卡下我需要浮动值,我不关心它旁边的百分比。下面这张图片是我从消息标签中得到的。基本上我想获取浮点值并将其分配给变量,这样我也可以在消息选项卡中显示它。

“结果”选项卡如下所示: Results

消息标签如下所示: message tab

当我打印该变量时,ChemGALPERMIN显示0。如何获得所需的浮点数?

2 个答案:

答案 0 :(得分:1)

如果Interface.Proc_getpivalueaveragetime是存储过程而不是用户定义的函数,那么就不能从存储过程返回值

UPDATE:如果您确定存储过程总是只返回1个浮点值并且存储过程不更新物理表数据,那么您可以将其转换为用户定义函数(CREATE FUNCTION示例)然后您将能够以原始帖子中的方式使用它,即@result = Interface.Proc_GetPIvalueAverageTime(...)。

但是,如果您仍希望将其保留为存储过程调用,则需要将其他参数传递给Interface.Proc_GetPIValueAverageTime并将其标记为OUTPUT。然后在存储过程的主体中,当您已经具有所需的浮点值时,可能在它的末尾,您需要将该额外的OUTPUT参数设置为计算的浮点值。

因此,在代码中它看起来像这样(您需要更新存储过程定义):

CREATE PROCEDURE Interface.proc_GetPIValueAverageTime 
           @result float, 
           @tag_in varchar(80), 
           @ProductionDate DATETIME, 
           @endDate DATETIME, 
           @pi_server VARCHAR(32),
           @Debug bit,
           -- new param below
           @sproc_result float OUTPUT
AS
BEGIN
... do your calc ..
set @sproc_result = @calculation_result_as_float
END

然后在调用上下文中,您需要定义额外的结果var(或使用您已经调用@result的那个)并将该额外的param传递给存储过程调用:

declare @sproc_result float;

EXEC @FCChemGALPERMIN = Interface.proc_GetPIValueAverageTime 
           @result, @tag_in, @ProductionDate, @endDate, @pi_server, @Debug,
           @sproc_result OUTPUT

-- here @sproc_result will have the float value you've assigned to it in the stored procedure body.
print cast(@sproc_result as varchar(15))

注意,IIRC需要在存储过程定义和调用语句中返回param 之后指定 OUTPUT

注意,您已经将@result var作为第一个param传递到存储过程中。然后只需在存储过程定义和调用语句中为其添加OUTPUT修饰符,并在存储过程体中为其赋值。这样您就不会需要我已命名为@sproc_result的新存储过程参数。

HTH

答案 1 :(得分:0)

考虑到第二列需要其他地方。

将结果插入临时表并从那里获取浮点值

Insert into #temp(float_col,percent_col)
EXEC Interface.Proc_getpivalueaveragetime
  @result,
  @tag_in,
  @ProductionDate,
  @endDate,
  @pi_server,
  @Debug 

select @FCChemGALPERMIN= float_col
From #temp

如果您的第二列在任何情况下都无用,请从结果百分比列

更改您的程序