使用一个存储过程从表中获取最后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
您可以在查询中使用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;