我正在尝试构建一个似乎返回网格的存储过程。但我只需要该网格的第一列。下面是我用来调用过程的代码
125004
在结果选项卡下我需要浮动值,我不关心它旁边的百分比。下面这张图片是我从消息标签中得到的。基本上我想获取浮点值并将其分配给变量,这样我也可以在消息选项卡中显示它。
“结果”选项卡如下所示:
消息标签如下所示:
当我打印该变量时,ChemGALPERMIN显示0。如何获得所需的浮点数?
答案 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
如果您的第二列在任何情况下都无用,请从结果百分比列
更改您的程序