记得以前我们一直要用存储过程来进行大数据分页的功能。现在有了这个函数,只要简单一个语句就能解决任何情况下的数据分页,不管你要排序的字段是否唯一,这个函数确实很用,我们先看看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

,就可以做到分页的效果了

posted on 2009-01-07 16:19  John.Lau  阅读(588)  评论(0编辑  收藏  举报