记得以前我们一直要用存储过程来进行大数据分页的功能。现在有了这个函数,只要简单一个语句就能解决任何情况下的数据分页,不管你要排序的字段是否唯一,这个函数确实很用,我们先看看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
,就可以做到分页的效果了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述