记得以前我们一直要用存储过程来进行大数据分页的功能。现在有了这个函数,只要简单一个语句就能解决任何情况下的数据分页,不管你要排序的字段是否唯一,这个函数确实很用,我们先看看MSDN给我们的解释:
返回结果集分区内行的序列号,每个分区的第一行从 1 开始。
语法
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
参数
<partition_by_clause>
将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。有关 PARTITION BY 的语法
<order_by_clause>
确定将 ROW_NUMBER 值分配给分区中的行的顺序。当在排名函数中使用 <order_by_clause> 时,不能用整数表示列。
为了便于说明问题,我们还是以一个实际的例子来看看效果如何:
我们先建一个临时表:
sql语句如下:
create table #TempTable
(
Name varchar(50),
Age int
)
表里有如下数据:
Name Age
AA 20
AA 22
BB 22
BB 25
下面我们用ROW_NUMBER才前面加上一个ID的列<order_by_clause> 的使用
select row_number() over (order by Name) as ID,Name,Age from #TempTable
ID Name Age
1 AA 20
2 AA 22
3 BB 22
4 BB 25
大家可以看到我们产生的ID列,也就是表的顺序;
select row_number() over (partition by Name order by Name) as ID,Name,Age from #TempTable
我们以Name 为partition ,所以产生的效果如下:
ID Name Age
1 AA 20
2 AA 22
1 BB 22
2 BB 25
我们在做分页控件的时候这个函数就非常有用了哦,比如说:我们可以让控件传入一个rowStart,和rownEnd参数,这样我们用sql
select Name,Age from
(
select row_number() over (partition by Name order by Name) as ID,Name,Age from #TempTable
) as a
where a.ID>1 and a.ID<4
,就可以做到分页的效果了