您的位置:首页 > 数据库

SQL2005 新特性之一:ROW_NUMBER 函数

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

,就可以做到分页的效果了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: