2010-06-24 38 views
1

我目前有一個運行復雜查詢並返回數據集的存儲過程。如果可能的話,我想把這個數據集轉換成一個表格(我可以在這個表格上進一步查詢)。我知道我可以使用表值UDF來做到這一點,但我寧願避免在這一點上。有什麼辦法可以完成這項任務嗎?作爲表演員存儲過程結果?

編輯:好的...所以我使用的SProc(由第三方編寫,我不應該改變它)運行一個相當複雜的select語句來返回一堆關於採購訂單的行項目數據。我可以將它重新創建爲UDF,但之後我必須支持UDF並確保在供應商更改其SProc時進行更改。我希望通過一些條件(如(但不限於)商品編號,供應商代碼,成本中心等)進一步細化此訂單項信息。所有這些信息都由原始SProc帶回,我只需要能夠進一步操縱它。我的思考過程是,如果我可以以某種方式將SProc的結果作爲表處理(或者將它們轉換爲某種類型的表格格式),那麼我可以針對原始結果集運行進一步的查詢,以通過上述標準進行限制。請讓我知道是否需要任何進一步的細節。

回答

1

在存儲過程之間共享數據有多種方式 - this link is pretty exhaustive

但我很好奇,爲什麼你要重視存儲過程(不SQL Server上)時,有表值函數表...

+0

它不是一個表值SProc,因爲它是一個運行查詢的SProc。我想進一步處理所述查詢的結果,而不必將其重寫爲UDF。 – 2010-06-24 17:45:25

+0

@Sonny Boy:提供更多細節。你可以使用臨時表,但這對我來說是最後的選擇。請注意,基於SQL的設置,OOP範例隨着數據集大小的增加而不能很好地擴展。 – 2010-06-24 17:47:33

+0

編輯原始文章以包含更多細節。謝謝。 – 2010-06-24 17:56:54

0

你有沒有考慮使用table-valued parameters?他們是在2008年SQL

新 - 編輯 -

不,沒關係,他們只是很好的傳遞數據爲存儲過程。

1

演員存儲過程結果作爲 表?

是的,這經常使用。它只是需要一個或多個SELECT語句:

Create Procedure #Foo 
As 
Select object_id, name 
From sys.columns 

這就是說,你不能加入到這個結果集也不能你輕鬆地使用它從另一個存儲過程(雖然有一種方法)。鑑於您的編輯,看來問題是您是否可以使用另一個存儲過程來使用存儲過程的結果。技術上,是的。您可以使用proc的結果填充臨時表。但是,必須使用與存儲過程的第一個結果集所返回的列結構相同的結構聲明您的臨時變量或臨時表。

Declare @Data Table (object_id int, name nvarchar(128)) 

Insert @Data 
ExeC#Foo 

Select * 
From @Data 

(或使用更聰明的解決方案OPENROWSET由凱德魯和OMG小馬所提到的)

0

你可以嘗試使用一個視圖,而不是一個存儲過程。將複雜查詢存儲爲視圖的一部分,並且您可以在視圖上執行更多查詢。