2013-03-09 66 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

相关问题