使用一个存储过程从表中获取N个最后一行
问题描述:
我想从一个存储过程获取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
答
这是我的解决方案:
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;
答
您可以在查询和订单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;
这不是一个好的答案。例如,如果我的没有分页的查询有100行,我想查看第10页的10行,我将有11到20之间的行,但是我也需要100以创建10个可分页的页面。 – 2016-11-20 04:16:36