Sql 存储过程返回多个值,但只需要一个值
我正在尝试构建一个似乎返回网格的存储过程。但我只需要网格的第一列。下面是我用来调用过程的代码Sql 存储过程返回多个值,但只需要一个值,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我正在尝试构建一个似乎返回网格的存储过程。但我只需要网格的第一列。下面是我用来调用过程的代码 USE [OperationsView] DECLARE @ProductionDate As DateTime DECLARE @tag_in As VARCHAR(80) DECLARE @FCChemGALPERMIN float DECLARE @pi_server As VARCHAR(32) DECLARE @endDate As DateTime DECLARE @Debug As B
USE [OperationsView]
DECLARE @ProductionDate As DateTime
DECLARE @tag_in As VARCHAR(80)
DECLARE @FCChemGALPERMIN float
DECLARE @pi_server As VARCHAR(32)
DECLARE @endDate As DateTime
DECLARE @Debug As Bit
DECLARE @result As Float
SELECT @ProductionDate = '2016-12-01 07:00:00'
SELECT @tag_in = 'I-FC-835'
SELECT @pi_server = 'valpi'
SELECT @endDate = DATEADD(DAY, 1, @productionDate)
SELECT @Debug = 1
EXEC @FCChemGALPERMIN = Interface.proc_GetPIValueAverageTime
@result, @tag_in, @ProductionDate, @endDate, @pi_server, @Debug
PRINT @FCChemGALPERMIN
PRINT 'done'
在结果选项卡下,我需要那个浮点值,我不关心它旁边的百分比。下面这张图片是我从messages标签中得到的信息。基本上,我想获取该浮点值并将其分配给一个变量,这样我也可以在messages选项卡中显示它
“结果”选项卡如下所示:
“消息”选项卡如下所示:
当我简单地打印该变量时,ChemGALPERMIN显示为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
如果第二列在任何情况下都不可用,则根据生成的百分比列更改过程如果
接口。Proc_getpivalueaveragetime
是一个存储过程,而不是用户定义的函数,则您不能从存储过程返回这样的值
更新:如果您确定存储过程始终只返回1个浮点值,并且存储过程不更新物理表数据,则可以将其转换为用户定义的函数(示例),然后您就可以按照原始帖子中的方式使用它,即@result=Interface.Proc_GetPIvalueAverageTime(…)
但是,如果仍希望将其保留为存储过程调用,则需要向接口.Proc_GetPIValueAverageTime传递一个附加参数,并将其标记为输出。然后在存储过程的主体中,可能在存储过程的最后,当您已经有了所需的浮点值时,您需要将额外的输出参数设置为计算出的浮点值
因此,在代码中,它看起来像这样(您需要更新存储过程定义):
然后在调用上下文中,您需要定义额外的结果变量(或使用您已经调用的@result),并将该额外参数传递给存储过程调用:
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需要在存储过程定义和调用语句中的返回参数之后指定输出
注意,您已经将@result变量作为第一个参数传递到存储过程中。然后只需在存储过程定义和调用语句中为其添加OUTPUT
修饰符,并在存储过程体中为其赋值。这样,您就不需要我命名为@sproc\u result
的新存储过程参数
HTH为什么您和您的代码不能忽略第二列?应用程序不必显示它接收到的所有内容。如果你只是在谈论SSM,我的代码和我已经尝试过了,但没有太多luck@Gio我认为问题不在于返回的列数,而在于从存储过程返回结果的方式。请看下面我的答案。如果不看存储过程的代码,很难帮助您。看起来您正试图使用存储过程的返回值进行输出,但是,无论如何,您都不能返回带有返回值的浮点。尝试使用输出参数(同样,我们可以向您展示如何执行此操作,但我们现在需要查看代码的外观,以告诉您如何更改它)。我只是无法将第一个浮点值放入变量中
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))