2024年3月19日发(作者:)

Row_Number()分页

分页方法一

一般的我们查询一些记录出来之后,查询出来的记录就是我们想要的,如果 我

们的表中有一个ID为自动编号,那么如果表中的ID为连续的话,我们查询出

来的第一列数据就会像这样:

ID 字段

1

字段

2

1 …… ……

2 …… ……

3 …… ……

4 …… ……

5 …… ……

再 做一个假设,如果我们的表中没有ID呢,或者ID号不是连续的呢,如果我

们按照ID来分页的话,就会碰到一些小问题。为了解决分页的问题,微软在SQL

Server 2005中添加了这个内置函数。当我们的数据表中即使没有一个自增ID的

话,使用Row_Number()函数照样能实现自增的一串连续的记录,就像上表的 ID

一样。

例如:

select row_number() over(order by getdate() desc) as rownumber,* from table

这条SQL语句的意思是查询一个自增的row_number列(在查询的结果中

rownumber这列来表示row_numvber的结果)以及table表中的所有记录,需要注

意的是row_number是做过排序的,根据日期进行倒序排序。结果类似这样的:

declare @currentPageIndex int --当前页号

@currentPageIndex=1 --设置当前页号为 set

select top 5 * from (select row_number() over(order by id desc) as

rownumber,* from testdata) as testdata

where rownumber>5*(@currentPageIndex-1)

解释:这里设置的是每页实现5条记录,变量为当前页的索引号,在这里为了符

合正常思维,对索引页号进行了处理(减1操作)。通过对变量@currentPageIndex

进行赋不同的值,可以看到效果。

分页方法之二

方式一:在当前select中不能采用RowNumber字段,并且不能使用排序

示例代码:

select * from (

select * ,ROW_NUMBER() over (order by id desc) as rownumber from

testdata

)testdata

where rownumber between 5 and 10

表中选出rownumber不在5到10之间的记录

代码解释:

使用Row_Number()函数实现自增的一串连续的记录,在从testdata

方式二:

ROW_NUMBER() OVER

ROW_NUMBER()就是生成一个有顺序的行号,其生成的标准就是后面紧跟的

OVER(order by XX)

示例代码:

方式三:

示例代码:

select * from (

select ROW_NUMBER() OVER(order by id asc) as rownum,id from

testdata

)as a

where rownum between (@pageIndex - 1)* @pageSize + 1 and @pageIndex

*

@pageSize order by id asc