网站/小程序/APP个性化定制开发,二开,改版等服务,加扣:8582-36016

这篇文章介绍了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分页的文章就介绍到这了。 


评论 0

暂无评论
0
0
0
立即
投稿
发表
评论
返回
顶部