【问题标题】:Insert results from Stored Procedures in a Temp Table with additional data将存储过程的结果插入到带有附加数据的临时表中
【发布时间】:2015-11-25 20:23:42
【问题描述】:

我正在使用一个存储过程,它使用现有过程的输出来处理公式并计算结果。我正在使用一个临时表来存储来自外部过程的结果以在公式中使用,但是很难让它按照我想要的方式工作。

我没有能力改变我正在使用的现有程序。

这是我想要实现的简化示例:

ALTER PROCEDURE dbo.GET_CUBIC_VOLUME,

@MYITEM varchar(25) = null,
@MY_RESULT decimal(38,2) OUTPUT

AS 
SET NOCOUNT ON

DECLARE @MY_HEIGHT decimal(38,2)
DECLARE @MY_WIDTH decimal(38,2)
DECLARE @MY_DEPTH decimal(38,2)

CREATE TABLE #MYVARS (V_NAME varchar(max),V_VAL money)

INSERT INTO #MYVARS (V_NAME,V_VAL) values ('HEIGHT', EXEC GET_ITEM_HEIGHT @MYITEM)
INSERT INTO #MYVARS (V_NAME,V_VAL) values ('WIDTH', EXEC GET_ITEM_WIDTH @MYITEM)
INSERT INTO #MYVARS (V_NAME,V_VAL) values ('DEPTH', EXEC GET_ITEM_DEPTH @MYITEM)

SET @MY_HEIGHT = (SELECT V_VAL from #MYVARS where V_NAME='HEIGHT')
SET @MY_WIDTH = (SELECT V_VAL from #MYVARS where V_NAME='WIDTH')
SET @MY_DEPTH = (SELECT V_VAL from #MYVARS where V_NAME='DEPTH')

SET @MY_RESULT = @MY_HEIGHT * @MY_WIDTH * @MY_DEPTH
SELECT @MY_RESULT

RETURN

我遇到的问题是使用字符串插入临时表以说明它是什么,以及相应存储过程的结果。

任何关于如何在不更改现有过程或不必为每个变量创建临时表的情况下实现此目的的见解都会很棒。

谢谢

【问题讨论】:

  • 请标记使用的 dbms。 (这看起来不像 ANSI SQL...)
  • 什么错误? #MYVARS 中是否插入了任何内容?
  • @tshoemake 错误是“____ 附近的语法不正确”,空白为“高度”或我试图放入表中的任何内容。当我省略 V_NAME 的字符串时,它将使该字段为空并记录 V_VAL 的辅助过程的输出。我只是不知道如何让两者一起工作。

标签: sql stored-procedures


【解决方案1】:

在你声明你的变量之后..

set @MY_HEIGHT = EXEC GET_ITEM_HEIGHT @MYITEM
set @MY_WIDTH = EXEC GET_ITEM_WIDTH @MYITEM
set @MY_DEPTH = EXEC GET_ITEM_DEPTH @MYITEM

然后将插入更改为..

INSERT INTO #MYVARS (V_NAME,V_VAL) values ('HEIGHT', @MY_HEIGHT)
INSERT INTO #MYVARS (V_NAME,V_VAL) values ('WIDTH', @MY_WIDTH)
INSERT INTO #MYVARS (V_NAME,V_VAL) values ('DEPTH', @MY_DEPTH)

不确定你现在是否需要插入 myvars temp。

【讨论】:

  • 这种工作,除了查询在执行时只返回第一个设置的变量。所以如果我执行 EXEC MY_HEIGHT = GET_ITEM_HEIGHT MYITEM 无论我在过程中做什么,当我从查询中执行它时,输出将是任何 MY_HEIGHT。
  • 你用的是sql server management studio吗?这是另一个在存储过程中工作的多个 exec 的示例:stackoverflow.com/a/170359/2803703 您是否也收到错误消息?
  • 非常感谢您的意见。谢谢你。我不知道为什么会遇到这个问题,但是当我尝试按照您的说明设置变量时,只有在从查询中执行过程时才会返回第一个设置值。我什至在程序结束时明确添加了“Select thisvar, thatvar, thatothervar”,但它仍然只吐出第一个设置变量。
  • 我需要查看您的 GET_ITEM_HEIGHT 存储过程的内容。将此粘贴到您的 OP 中。
猜你喜欢
  • 2018-11-16
  • 2018-07-05
  • 2020-01-26
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
相关资源
最近更新 更多