SQL Server分页方法汇总
更新时间:2022年05月19日 10:46:56 作者:springsnow
这篇文章介绍了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分页的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法
这篇文章主要介绍了SQLServer2005触发器'提示其他会话正在使用事务的上下文的解决'方法,如果你碰到了这个问题,可以看看下面的解决方法2013-11-11
Spark SQL 2.4.8 操作 Dataframe的两种方式
这篇文章主要介绍了Spark SQL 2.4.8 操作 Dataframe的两种方式,方式一是通过dsl操作,方式二是利用sql方式操作,每种方式通过实例代码给大家介绍的非常详细,需要的朋友可以参考下2021-10-10
Spark临时表tempView的注册/使用/注销/注意事项(推荐)
transformation是根据原有RDD创建一个新的RDD,而action则把RDD操作后的结果返回给driver,这篇文章主要介绍了Spark临时表tempView的注册/使用/注销/注意事项的相关资料,需要的朋友可以参考下2022-10-10


最新评论