原文:http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-side-paging-demo-using-offsetfetch-next.aspx?utm_source=brnewsletter&utm_medium=email&utm_campaign=2012Apr
SQL Server 2005 引入了 ROW_NUMBER()来提供一种容易的分页方式。 SQL Server 2012 添加了另外一种更简单高效的分页方式。
-
/*
-
执行脚本去创建这个表并插入数据。
-
*/
-
IF OBJECT_ID('Customers','U') IS NOT NULL
-
DROP TABLE Customers
-
-
CREATE TABLE Customers (
-
CustomerID INT,
-
CustomerNumber CHAR(4),
-
CustomerName VARCHAR(50),
-
CustomerCity VARCHAR(20) )
-
GO
-
-
INSERT INTO Customers (
-
CustomerID, CustomerNumber, CustomerName, CustomerCity
-
)
-
SELECT
-
Number,
-
REPLACE(STR(Number, 4), ' ', '0'),
-
'Customer ' + STR(number,6),
-
CHAR(65 + (number % 26)) + '-City'
-
FROM master..spt_values WHERE type = 'p'
-
AND number BETWEEN 0 AND 999
-
-
/*
-
用ROW_NUMBER()的分页示例- SQL Server 2005/2008 版本。
-
*/
-
-
DECLARE @page INT, @size INT
-
SELECT @page = 3, @size = 10
-
-
;WITH cte AS (
-
SELECT TOP (@page * @size)
-
CustomerID,
-
CustomerName,
-
CustomerCity,
-
ROW_NUMBER() OVER(ORDER BY CustomerName ) AS Seq,
-
COUNT(*) OVER(PARTITION BY '') AS Total
-
FROM Customers
-
WHERE CustomerCity IN ('A-City','B-City')
-
ORDER BY CustomerName ASC
-
)
-
SELECT
-
*
-
FROM cte
-
WHERE seq BETWEEN (@page - 1 ) * @size + 1 AND @page * @size
-
ORDER BY seq
-
-
/*
-
SQL Server 2012中新添加的分页示例
-
*/
-
-
DECLARE @page INT, @size INT
-
SELECT @page = 3, @size = 10
-
-
SELECT
-
*,
-
COUNT(*) OVER(PARTITION BY '') AS Total
-
FROM Customers
-
WHERE CustomerCity IN ('A-City','B-City')
-
ORDER BY CustomerID
-
OFFSET (@page -1) * @size ROWS
-
FETCH NEXT @size ROWS ONLY;
-
-
/*
-
同时执行这两个版本,打开执行计划,你可以注意到在这个例子中显著的性能差异。
-
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2017-07-25 SVN提交小结
2012-07-25 网络带宽大小和硬盘大小
2011-07-25 linq的常用写法
2008-07-25 使用 .NET Framework 2.0 在您的应用程序中支持证书(转)