2015-11-25 69 views
0

我正在使用存儲過程使用現有過程的輸出來處理公式並計算結果。我正在使用一個臨時表來存儲公式中使用的外部過程的結果,但是我很難讓它按照我想要的方式工作。將結果從存儲過程插入臨時表中並附加數據

我沒有能力改變我正在使用的現有程序。

這裏是我想達到什麼樣的一個簡單的例子:

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 

我在做插入到臨時表的字符串說,這是什麼問題,與沿來自適當的存儲過程。

如何在不改變現有過程或不必爲每個變量創建臨時表的情況下了解如何實現這一點,將會非常棒。

感謝

+0

請標記dbms used。 (這看起來不像ANSI SQL ......) – jarlh

+0

錯誤是什麼? #MYVARS中是否插入任何內容? – tshoemake

+0

@tshoemake 錯誤是「附近____的語法不正確」,空白爲「高度」,或者我試圖放在表格中的任何東西。當我省略V_NAME的字符串時,會將該字段留空並記錄V_VAL的輔助過程的輸出。我無法弄清楚如何讓兩者合作。 – user3560594

回答

0

後聲明變量..

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溫度雖然現在。

+0

這種工作,除了查詢只在執行時返回第一個設置變量。 所以,如果我做 EXEC MY_HEIGHT = GET_ITEM_HEIGHT MYITEM 不管還有什麼我在程序做,當我從一個查詢執行它,輸出將是什麼MY_HEIGHT是。 – user3560594

+0

你使用的是sql server management studio嗎?下面是在一個sproc中工作的多個exec的另一個例子:http://stackoverflow.com/a/170359/2803703你還收到一個錯誤? – tshoemake

+0

我真的很感激你的意見。謝謝你。 我不知道爲什麼我有這個問題,但是當我嘗試設置變量時,如上所述,當我從查詢執行過程時,我只收到第一個設置值。 我甚至在過程結束時明確添加了「Select thisvar,thatvar,thatothervar」,它仍然只是吐出第一個變量。 – user3560594

相關問題