2009-01-19 22 views
1

我正在編寫一個Silverlight客戶端,該客戶端通過ASP.NET 2.0 Web服務與SQL數據庫進行交互,這也是我正在開發的。其中一項服務需要返回存儲過程的結果,並且運行良好。但是,存儲過程的一個參數需要從存儲過程執行之前從不同位置檢索,並且這個對數據庫的額外請求會導致明顯的減速(顯然,當我緩存檢索到的值而不是每次調用時都會獲取)。如何檢索值並在存儲過程中在一個SQL查詢中使用它?

不幸的是,緩存值無法用於我的情況,我寧願將此值的檢索和隨後的存儲過程執行組合到一個查詢中,以便服務器可以優化請求。但是,我的SQL並不強大,我也沒有想過如何去做這件事。

這個值,我們稱之爲tasktype,通過一個關鍵字id來引用。存儲過程getrecords需要幾個參數,包括tasktype,但可以假定其他參數值在調用查詢時已知。存儲過程返回一個記錄表。

感謝您的任何幫助。

+0

返工您使用的是一個標量sproc來獲取tasktype的值? – 2009-01-19 14:18:46

+0

tasktype的值是通過常規SQL查詢獲取的。目前沒有存儲過程。 – 2009-01-19 14:23:06

回答

3

嗯,這可能是這樣的:

cmd.CommandType = CommandType.Text; 
    cmd.Parameters.AddWithValue("@id", ...); // your id arg 
    cmd.Parameters.AddWithValue(... , ...); // your other args... 
    cmd.CommandText = @" 
DECLARE @TaskType int -- or whatever 

SELECT @TaskType = // some existing query based on @id 

EXEC getrecords @TaskType, ... 
"; 

然而,你也許要澄清如何獲得一個任務類型。

您應該能夠將其作爲IDataReader或使用DataTable.Load使用。

0

您應該可以創建一個UDF,它將獲取tasktype的值並在您的數據檢索存儲過程中調用該值。

喜歡的東西

CREATE FUNCTION dbo.TaskType() 
Returns int 
    SELECT ... stuff that gets task type 
END 
與您的數據檢索存儲過程調用

DECLARE tasktype int 

SELECT tasktype = dbo.TaskType 

或類似的東西

然後......可能需要一點:-)

相關問題