加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server中分页的实现办法有几种 分别是什么

发布时间:2023-05-20 10:56:18 所属栏目:MsSql教程 来源:
导读:很多朋友都对“SQL Server中分页的实现方式有几种,分别是什么”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧

很多朋友都对“SQL Server中分页的实现方式有几种,分别是什么”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧!

根据SalesOrderID排序,取第16-18行这3条记录。

方法一:(最常用的分页代码, top / not in)

SELECT TOP 3 [SalesOrderID], [RevisionNumber], [OrderDate]

FROM [AdventureWorks2012].[Sales].[SalesOrderHeader]

WHERE [SalesOrderID] NOT IN ( SELECT TOP 15 [SalesOrderID]

FROM [AdventureWorks2012].[Sales].[SalesOrderHeader]

ORDER BY [SalesOrderID] )

ORDER BY SalesOrderID;

备注: 注意前后的order by 一致

方法二:排名开窗函数 (row_number() over (order by ))

SELECT [SalesOrderID], [RevisionNumber], [OrderDate]

FROM ( SELECT [SalesOrderID], [RevisionNumber], [OrderDate] ,

ROW_NUMBER() OVER ( ORDER BY SalesOrderID ) AS rowid

FROM [AdventureWorks2012].[Sales].[SalesOrderHeader] ) cte

WHERE rowid

BETWEEN 16 AND 18;

方法三:(offset /fetch next, SQL Server 2012支持,性能最好!)

SELECT [SalesOrderID], [RevisionNumber], [OrderDate]

FROM [AdventureWorks2012].[Sales].[SalesOrderHeader]

ORDER BY SalesOrderID OFFSET 15 ROW FETCH NEXT 3 ROWS ONLY;

总结:利用变量进行分页

DECLARE @page INT, @size INT, @Total INT;

SELECT @page = 3, @size = 10; --当前页面为3,页面大小为10

-------方法一

SELECT TOP ( @size ) [SalesOrderID], [RevisionNumber], [OrderDate]

FROM [AdventureWorks2012].[Sales].[SalesOrderHeader]

WHERE [SalesOrderID] NOT IN ( SELECT TOP (( @page - 1 ) * @size ) [SalesOrderID]

FROM [AdventureWorks2012].[Sales].[SalesOrderHeader]

ORDER BY [SalesOrderID] )

ORDER BY SalesOrderID;

-------方法二

SELECT [SalesOrderID], [RevisionNumber], [OrderDate]

FROM ( SELECT [SalesOrderID], [RevisionNumber], [OrderDate] ,

ROW_NUMBER() OVER ( ORDER BY SalesOrderID ) AS rowid

FROM [AdventureWorks2012].[Sales].[SalesOrderHeader] ) cte

WHERE rowid

BETWEEN ( @page - 1 ) * @size + 1 AND @page * @size;

-------方法三

SELECT [SalesOrderID], [RevisionNumber], [OrderDate]

FROM [AdventureWorks2012].[Sales].[SalesOrderHeader]

ORDER BY SalesOrderID OFFSET ( @page - 1 ) * @size ROWS FETCH NEXT @size ROWS ONLY; ---offset的当前页面是从零开

到此这篇关于“SQL Server中分页的实现方式有几种,分别是什么”的文章就介绍到这了,更多相关SQL Server中分页的实现方式有几种,分别是什么内容,小编将为大家输出更多高质量的实用文章!

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章