首页 新闻 会员 周边 捐助

关于 StartRowIndex 和 MaximumRows

0
悬赏园豆:20 [待解决问题]

StartRowIndex和MaximumRows  的算法

在网上查到的是

比如说有三页

第一页   0 * 10 + 1

对第二页来说(索引为 1), 第一行的索引为1 * 10 + 1,即 11.

按这个算  这个SQL语句就行了

 

SELECT PriceRank, ProductName, UnitPrice
       FROM
       (SELECT ProductName, UnitPrice,
       ROW_NUMBER() OVER(ORDER BY UnitPrice DESC) AS PriceRank
       FROM Products
       ) AS ProductsWithRowNumber
       WHERE PriceRank > StartRowIndex AND PriceRank <= (StartRowIndex + MaximumRows)

其中就是 priceRand>11 and PriceRand<=(11+10) ?

那查出来的结果就是12条记录到31条记录啊,那说明上边说的

对第二页来说(索引为 1), 第一行的索引为1 * 10 + 1,即 11. 这个算法不对啊?》

那应该杂算

问题补充:

http://msdn.microsoft.com/zh-cn/dd277470

此文章对Start Row Index 和Maximum Rows 做了解释

  • Start Row Index – 要显示的 数据页面的第一行索引,这个索引值可以通过页面索引乘以每页显示的记录数加1 得到。例如,如果一页显示 10 条记录,那么对第一页(页索引为 0 )来说, Start Row Index 为 0 * 10 + 1 ,即 1 ;对第二页(页索引为 1 )来说, Start Row Index 为 1 * 10 + 1 ,即 11 。
  • Maximum Rows – 每页最多显示的记录数。该变量被称为“最大”行数是因为,最后一页返回的记录数可能小于页面大小。例如,对 81 件产品分页时,每页显示 10 条记录,第九页(即最后一页)只含有一条记录。页面显示的记录数不会大于 Maximum Rows 的值。

按它说的是Start Row Index  第二页就是11吗?那SQL里的语句不就是 

WHERE PriceRank > 11AND PriceRank <= (11+ 10)  这样得出来的结果肯定不对呀

Youngli的主页 Youngli | 初学一级 | 园豆:119
提问于:2014-08-09 16:16
< >
分享
所有回答(1)
0

declare @perPageSize int,@StartRowIndex int,

set @perPageSize=10  

set @StartRowIndex=0   ----  页索引第一页从0开始

 

SELECT PriceRank, ProductName, UnitPrice
       FROM
       (SELECT ProductName, UnitPrice,
       ROW_NUMBER() OVER(ORDER BY UnitPrice DESC) AS PriceRank
       FROM Products
       ) AS ProductsWithRowNumber
       WHERE PriceRank >= (@StartRowIndex*@perPageSize+1) AND PriceRank <= ((@StartRowIndex+1)*@perPageSize)

------------------------------

改了下SQL你试下...

我叫宋 | 园豆:171 (初学一级) | 2014-08-09 18:35

谢谢您的回复,可能是我理解能力和表答能力差吧,我现在把问题再补充一下。

支持(0) 反对(0) Youngli | 园豆:119 (初学一级) | 2014-08-10 10:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册