2011-01-12 53 views
0

希望這很簡單。我正在優化一個返回約500行以上的存儲過程。我的計劃是批量返回行,直到沒有更多的行獲得。如何從SQL Server存儲過程返回行和變量

例如,我會得到0-49行 - 那麼50-99,然後100-149,等等..

我使用下面的SQL代碼來實現這一點:

CREATE PROCEDURE [dbo].[mySP] 
@rowstart int, 
@rowend int 

AS 

WITH MainQuery AS 

(
    HUGE SELECT STATEMENT HERE 
) 

select * from MainQuery where row between @rowstart and @rowend 

當我執行這個SP,我簡單地傳遞在rowstart和rowend值,它將返回我想要完美的行的範圍。

問題是,我想知道每個查詢後都有更多的行。我認爲我可以通過在MainQuery塊完成後返回@@ ROWCOUNT來完成該操作,但是我不知道如何在每次執行SP後獲取返回的行的範圍和@@ ROWCOUNT的值。

當我做出返回50行的初始查詢時,如果我可以知道有503個TOTAL錶行,我可以做一些簡單的數學計算(503/50)並計算出需要多少次調用SP。任何幫助表示讚賞!

+0

這是一個尋呼類型需要? - 即你並不總是需要503行? – 2011-01-12 00:42:01

回答

0

其他的答案會告訴你如何得到答案了存儲過程的...

我想指出的是,@@ROWCOUNT@rowend - @rowstart + 1。所以,除了最後一頁你有50行。對於最後一頁,您可以從DataTable中獲取客戶端的行數。

你需要的是這樣的事情,如果你從SQL希望

WITH MainQuery AS 
    (
    HUGE SELECT STATEMENT HERE 
) 
select * from MainQuery 
CROSS JOIN 
(SELECT COUNT(*) AS TotalRows FROM MainQuery) MC 
where row between @rowstart and @rowend 

WITH MainQuery AS 

(
    HUGE SELECT STATEMENT HERE 
) 
SELECT * INTO #foo 

select * from #foo F 
CROSS JOIN 
(SELECT COUNT(*) AS TotalRows FROM #foo) M 
where F.row between @rowstart and @rowend 

WITH MainQuery AS 

(
    HUGE SELECT STATEMENT HERE 
) 
SELECT * INTO #foo 
select * from #foo F where F.row between @rowstart and @rowend 

SELECT @outparam = COUNT(*) FROM #foo 
0

你有沒有聽說過的OUTPUT參數?您可以將行數存儲在OUTPUT參數中,並使存儲的proc返回行。

更多信息,可以發現here

相關問題