使用一个存储过程从表中获取N个最后一行

时间:2013-03-09 08:21:04

标签: c# stored-procedures sql-server-2012

我希望从表中获取N个最后一行,并使用一个存储过程。

我的存储过程包含一些参数,例如@PageNumber@RowCount等等。

我有两个问题:

  • 我需要计算用户界面中的行数和结果,因为我想限制用户进入最后一页并按下一页。

  • 我希望我的用户可以在其他页面中按最后一页。

提示:我不想执行我的存储过程两次以获取结果和行数,因为它会创建动态并需要很长时间才能执行。

有关更多说明,我最常说我的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  

2 个答案:

答案 0 :(得分:2)

您可以在查询中使用Row_Number()并按SubscribeId降序排序,row[0]["RowNumber"]为总数 像这样:

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;

答案 1 :(得分: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;