惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
Last Week in AI
Last Week in AI
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - Franky
The Cloudflare Blog
罗磊的独立博客
月光博客
月光博客
N
Netflix TechBlog - Medium
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
Jina AI
Jina AI
J
Java Code Geeks

博客园 - TanSea

VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - 构建篇 VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - Gogs篇 VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - Docker篇 VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - Jenkins篇 VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - 准备篇 Sql Server 分批复制数据 Sql Server 查询数据库表结构 MAUI Blazor+MASA开发安卓应用学习笔记 - 设置图标和初始屏幕 MAUI Blazor+MASA开发安卓应用学习笔记 - 设置APP格式、名称、版本信息 MAUI Blazor+MASA开发安卓应用学习笔记 - 新建项目和发布 一道SQL面试题的解题思路 Windows10设置默认简体美式键盘输入法 C# 历史版本特性变更(更新到C# 11) SQL Server Report Builder RDLC按记录数分页 一次Exchange邮箱接口的开发经历 一次.NET项目反编译的实战经验(WinForm) 点石成金-访客至上的网站设计秘笈 读书笔记 Windows7使用无线网卡建立WiFi热点 程序员的职业素养 读书笔记 - 第14章 辅导、学徒期与技艺
SQL Server分页查询进化史
TanSea · 2019-12-11 · via 博客园 - TanSea

分页查询一直SQL Server的一个硬伤,就是是经过一些进化,比起MySql的limit还是有一些差距。

一、条件过滤(适应用所有版本)

条件过滤的方法有很多,而思路就是利用集合的差集选择出目标集合以达到分页查询的效果,以下是最常见的一个思路

SELECT TOP @PageSize * FROM TableName
WHERE ID NOT IN (SELECT TOP (@PageSize * (@PageIndex - 1)) ID FROM TableName ORDER BY ID)
ORDER BY ID

@PageSize是指每页记录数

@PageIndex是指页数

TableName是要查询的表名

ID一般是指主键,当然其他唯一值也是可以的, 如果不是唯一值分页结果就会不准确

二、行序号(适应2005及以后版本)

2005版本开始加入新指令,用来给行添加序号,而思路就是通过判断行序号来达到分页查询的效果

SELECT TOP (@PageSize) *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY ID) AS RowIndex, * FROM TableName) NewTableName
WHERE RowIndex>(@PageSize * (@PageIndex - 1))

ROW_NUMBER() OVER(ORDER BY ID)是指按ID排序生成行序号

RowIndex是行序号的列名

NewTableName是包括行序号新表的表名

PS:这种分页查询会有行序号

三、排序分页参数(适应2012及以后版本)

2012版本开始排序指令加入了新的参数,可以用来分页查询

SELECT * FROM TableName
ORDER BY ID
OFFSET (@PageSize * (@PageIndex - 1)) ROWS
FETCH NEXT (@PageSize) ROWS ONLY

OFFSET是指跳过多少条记录,FETCH NEXT是指查询多少条记录。这种格式和EF里面的Skip和Take类似