2012-08-03 54 views
0

我有一個存儲過程,它現在返回一個(可能)大型數據集。這個數據是從遞歸調用,所以它看起來是這樣的:SQL返回與創建表的情況下

With Hierarchy as(

SELECT distID as D, [Name] as N, enrolling as E, parent_code as P, 
     FROM sales_reps 
     WHERE enrolling = @dist_ID 
     UNION ALL 
      SELECT 
      t.distID as D, t.[Name] as N, t.enrolling as E, t.parent_code as P 
     FROM sales_reps t 
      INNER JOIN Hierarchy h ON t.enrolling = h.D 
) 
SELECT *, CASE WHEN P > 5 Then 1 Else 0 END As Q 
From Hierarchy 

好了,這還不算什麼大不了的事,問題是現在我需要使用這些數據多了很多,並會做多在此查詢幾分鐘。因此,有時計劃(爲了不破壞當前的功能)創建一個表格,這些表格將在稍後被刪除。

我想是這樣的:

CASE @temp_Table 
    WHEN IS NULL 
     Select * FROM retTable 
    ELSE 
     SELECT INTO @temp_Table 
     * FROM retTable 
End 

但我不能得到它讓我的名字,結果可浸解或類似的case語句。我不認爲這是一個正確的使用案例陳述,但我不知道還有什麼其他用途。

回答

0

這是我發現的關於如何在存儲過程之間共享數據的最佳文本。有很多在它的信息,但它是值得一讀:

http://www.sommarskog.se/share_data.html

不知道多久的,並以充分的細節,你要保存這些數據的表有幾個選項,你什麼情景可以用。

如果您只需將這些信息保存在一個地方,簡單的INSERT-EXEC可能適合您。你被叫過程的輸出(這我打電話hierarchy_stored_proc

CREATE TABLE #results (...) 
INSERT INTO #results 
EXEC hierarchy_stored_proc 

如果你認爲你需要在更多的地方這樣的輸出相匹配的調用過程中創建一個臨時表,你可以改變被叫過程總是將數據寫入臨時表,然後向proc添加一個參數,該參數表示它是否應通過select語句返回結果集。如果您設置了該過程的默認值1,則現有功能不應受到影響。例如:

WITH Hierarchy AS (...) 
INSERT INTO #results 
SELECT ... 

IF @returnResults=1 
    SELECT * FROM #results 
相關問題