随笔 - 30  文章 - 0 评论 - 161 阅读 - 78333
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

记得以前我们一直要用存储过程来进行大数据分页的功能。现在有了这个函数,只要简单一个语句就能解决任何情况下的数据分页,不管你要排序的字段是否唯一,这个函数确实很用,我们先看看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   John.Lau  阅读(589)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示