hyadijxp 发表于 2016-11-1 07:43:56

SQL Server 2005中的Row_Number分页

  早就听说了SQL Server 2005中的Row_Number分页了,但是一直就没认真理解这个Row_Number的含义。这两天实在是太忙了,但是还是坚持将这个弄明白了。在说分页之前还是来了解一下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 test_table
  
  这条SQL语句的意思是查询一个自增的row_number列(在查询的结果中rownumber这列来表示row_numvber的结果)以及test_table表中的所有记录,需要注意的是row_number是做过排序的,根据日期进行倒序排序。结果类似这样的:

  
  那么如何分页呢,给出一个示范代码:
  

declare @currentPageIndex int
set @currentPageIndex=2
select top 5 * from (select row_number() over(order by getdate() desc) as rownumber,* from test_table) as temp_table
where rownumber>5*(@currentPageIndex-1)
  
  做个简单的解释:这里设置的是每页实现5条记录,变量为当前页的索引号,在这里为了符合正常思维,对所以号进行了处理(减1操作)。通过对变量@currentPageIndex 进行赋不同的值,可以看到效果。
页: [1]
查看完整版本: SQL Server 2005中的Row_Number分页