如何在存儲過程B中,對存儲過程A的結果集進行查詢

問題:

 

有讀者來信詢問:如何在存儲過程B裏面使用存儲過程A執行後的結果集?就是在存儲過程B裏面再對存儲過程A的結果集進行查詢。

 

解答:

 

建議您在存儲過程中將另外一個存儲過程的結果集先存放到一個暫存數據表,接着對此暫存數據表進行查詢處理之後,然後再將最終的處理結果傳出。

 

在此我們將示範如何在存儲過程中使用名稱以 # 開頭的區域性暫存數據表以及table數據類型的變量來儲存另外一個存儲過程的結果集,並進行後續的處理。

 

程序範例一


以下的程序代碼會先建立一個查詢所有薪資與性別的存儲過程(uspGetIncome),接着建立一個以「性別」爲查詢條件的存儲過程(uspGetTotalIncomeByGender)。在存儲過程uspGetTotalIncomeByGender中,我們會建立一個名稱爲 #tmpTable 的暫存數據表,然後使用INSERT INTO ... EXECUTE <存儲過程> 表達式將另外一個存儲過程 uspGetIncome 的結果集新增至暫存數據表中,接着以「性別」爲分類條件,使用 SUM 函式來計算出不同性別的收入總計。最後,我們分別以男性與女性爲輸入參數呼叫存儲過程 uspGetTotalIncomeByGender(執行結果如圖表1所示):

 

...

-- 查詢目前薪資之SP

CREATE PROCEDURE dbo.uspGetIncome

AS

SELECT 目前薪資, 性別 FROM 章立民研究室;

GO

 

-- 建立以「性別」爲查詢條件的 SP

-- 這個 SP 會呼叫上面的 SP

CREATE PROCEDURE dbo.uspGetTotalIncomeByGender

  @Gender nvarchar(1)

AS

-- 建立一個暫存數據表

CREATE TABLE #tmpTable (目前薪資 money, 性別 nvarchar(1));

INSERT INTO #tmpTable EXECUTE dbo.uspGetIncome;

-- 取得以性別爲分類條件的收入總計

SELECT SUM(目前薪資) AS 收入總計 FROM #tmpTable WHERE 性別 = @Gender;

GO

 

-- 查詢性別爲「男」的員工收入總計

EXECUTE dbo.uspGetTotalIncomeByGender '男';

GO

 

-- 查詢性別爲「女」的員工收入總計

-- 省略 EXECUTE 關鍵詞

-- 並指定 @Gender 這個參數名稱來執行SP

-- 請注意,此時 SP 必須是表達式的第一道指令

dbo.uspGetTotalIncomeByGender @Gender = '女';

GO






    有些程序員喜歡使用存儲過程來實現一些數據的查詢工作,如果客戶端用戶(這裏是指使用這些存儲過程的程序員)想對得到的結果進行篩選,目前沒有簡單的辦法,但是可以利用臨時表作爲折中的辦法。



Create Table #TmpTable(FieldList)
Insert Into #TmpTable Exec StoreProcedureName ParameterList

需要指出創建臨時表語句中的字段列表FeildList需要和存儲過程返回的字段順序一致;ParameterList是存儲過程要用到的參數。執行完之後,

    就可以使用Select語句對剛創建的臨時表進行條件查詢了。最後不要忘記刪除掉臨時表。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章