2012-10-08 50 views
-1

我需要將存儲過程結果存儲在臨時表中。但是存儲過程結果可能是任何列排序中的任何表。使用存儲過程作爲函數

是否有一個通用表(沒有指定列),我們可以插入任何表? 我知道我可以使用一個函數,但有可能使用存儲過程嗎?

這是代碼:

begin transaction 

create table temp_table as 

exec my_store_proc 1,111 

select * from temp_table 

drop table temp_table 

commit transaction 
在上面的代碼

my_store_proc結果與6列(例如)

+2

如果您還解釋爲什麼要嘗試這樣做,您可能會得到更好的建議。 –

+0

我有一個存儲過程生成我的程序報告。現在我想在另一個連接查詢中使用這個結果,但是不想在函數中複製代碼,也不想更改基本代碼(存儲過程) –

+1

*您最好將代碼移到可能的地方。然後更改預先存儲的proc以調用該函數(作爲簡單的API樣式包裝器)以保持向後兼容性。 – MatBailie

回答

1

及其更好的表去tiwth功能不僅是因爲與procecure其不可能。創建具有返回類型表的函數並使用它可以正常工作。

你能做到這一點,但列的順序不控制

--INSERT...EXECUTE procedure example 
INSERT @temptable EXECUTE proceudrename 
+0

以及你如何聲明可臨時性?我不想在聲明中指定列 –

2

你可以使用這樣的方法。

declare @t table(ID int, Name nvarchar(max), AnotherId int) 

insert @t 
exec theStoredProc 

-- then you can utilize the result in a join 

select * from SomeTable inner join @t as t on SomeTable.ID = t.ID.... 
+0

這個問題有一個很好的討論:如何選擇* INTO [臨時表]從[存儲過程]「http://stackoverflow.com/questions/653714/how-to-select- into-temp-table-from-stored-procedure/1228165 –

+0

注意:要指定列是很困難的,除非sproc根據輸入返回不同的結果,否則結果集不會總是具有相同的形狀無論如何呢? –

-1

試試這個

開始交易

創建表@tmp ( 你的字段定義在my_store_proc程序 )

插入到@tmp EXEC my_store_proc 1111

選擇*來自@tmp

交易交易

+0

好吧,我知道,但我的問題有點不同:「沒有指定列」。感謝您的關注 –

相關問題