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

本文关键字:获取 最后 存储过程 一个 | 更新日期: 2023-09-27 18:03:10

我想用一个存储过程从表中获取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  

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

您可以在查询中使用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;

这就是我的解决方案:

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;