Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程返回多个值,但只需要一个值_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

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))