2013-03-09 61 views
1

我想從一個存儲過程獲取N個最後一行。使用一個存儲過程從表中獲取N個最後一行

我的存儲過程有像@PageNumber@RowCount

一些參數我有2個問題:

  • 我需要計數行和結果在我的用戶界面,因爲我想限制我的用戶,當他在最後一頁,然後按下一頁。

  • 我希望我的用戶可以按最後一頁,當他在其他頁面。

提示:我不想執行兩次我的存儲過程得到的結果和行數,因爲它創建動態的,需要很長的時間執行。

詳細說明我最有發言權,我的SP是這樣的:

Create Procedure TestSelectBill 
( 
    @PageNumber int = 1 , 
    @RowCount int = 5 
) 
As 
Begin 
    Select 
     * 
    From billing.BillMaster As BM 
    Where 
    (Bm.SubscribeId = '12345674') 
    Order by SubscribeId 
    OFFSET @PageNumber * @RowCount ROWS 
    FETCH NEXT @RowCount ROWS ONLY; 
End 

回答

0

這是我的解決方案:

Select 
    COUNT() OVER (ORDER BY (SELECT NULL)) as RowNumber, 
    * 
From billing.BillMaster As BM 
Where 
(Bm.SubscribeId = '12345674') 
Order by SubscribeId 
OFFSET (@PageNumber - 1) * @RowCount ROWS 
FETCH NEXT @RowCount ROWS ONLY; 
2

您可以在查詢和訂單SubscribeId下降和row[0]["RowNumber"]使用Row_Number()是總數 這樣的:

Select 
     * , 
ROW_NUMBER() OVER (ORDER BY SubscribeId DESC) as RowNumber 
    From billing.BillMaster As BM 
    Where 
    (Bm.SubscribeId = '12345674') 
    Order by SubscribeId 
    OFFSET @PageNumber * @RowCount ROWS 
    FETCH NEXT @RowCount ROWS ONLY; 
+0

這不是一個好的答案。例如,如果我的沒有分頁的查詢有100行,我想查看第10頁的10行,我將有11到20之間的行,但是我也需要100以創建10個可分頁的頁面。 – 2016-11-20 04:16:36

相關問題