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

C# 使用一个存储过程从表中获取最后N行,c#,stored-procedures,sql-server-2012,C#,Stored Procedures,Sql Server 2012,我想用一个存储过程从表中获取最后N行 我的存储过程有一些参数,如@PageNumber和@RowCount等 我有两个问题: 我需要在我的用户界面中计算行数和结果数,因为我想在用户处于最后一页时限制他,然后按下一页 我想我的用户可以按最后一页时,他在其他页面 提示:我不想为了得到结果和行数而执行两次存储过程,因为它会产生动态性,并且需要很长的执行时间 关于更多说明,我最多说我的sp类似于: Create Procedure TestSelectBill ( @PageNumb

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

您可以在查询中使用
Row_Number()
命令
subscribe
降序,并且
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; 

这不是一个好答案。例如,如果没有分页的查询有100行,并且我希望看到第二个页面有10行,那么我将有11到20行,但是我还需要数字100来创建10个可能的分页。