SQL SERVER的有哪几种分页方式

2022年4月12日 17点热度 0人点赞

在日常工作中,经常需要解决分页的问题,也是数据库分页(真分页)必须要做的一件事情。发现数据库有多种分页方法

工具/原料

  • 工具:SQL SERVER 2017

方法/步骤

  1. 1

    第一种:ROW_NUMBER() OVER()方式

    把表中的所有数据都按照一个ROW_NUMBER进行排序,然后查询ROW_NUMBER 10 到20之间的前十条记录。

    SELECT * FROM ( 

        SELECT *, ROW_NUMBER() OVER(ORDER BY LOG_ID ) AS ROWID FROM LOG_SYSTEM

      ) AS B

    WHERE ROWID BETWEEN 10 AND 20 

    ---WHERE ROWID BETWEEN 当前页数-1*条数 AND 页数*条数---     

  2. 2

    第二种方式:OFFSET FETCH NEXT方式(SQL2012以上的版本才支持:推荐使用 )

    使用OFFSET是SQLServer2012新具有的分页功能,主要功能是从第x条数据开始共取y数据。但是其必须根再Order By后面使用,相比前三种方式更加方便。

    SELECT * FROM LOG_SYSTEM 

    ORDER BY LOG_ID 

    OFFSET 4 ROWS FETCH NEXT 5 ROWS ONLY

    ---ORDER BY LOG_ID 

       OFFSET 页数 ROWS FETCH NEXT 条数 ROWS ONLY ---

  3. 3

    --第三种方式:--TOP NOT IN方式 (适应于数据库2012以下的版本)

    先搜出id在1-15之间的数据,紧接着搜出id不在1-15之间的数据,最后将搜出的结果取前十条。

    SELECT TOP 10 * FROM LOG_SYSTEM 

    WHERE LOG_ID NOT IN (SELECT TOP 15 LOG_ID FROM LOG_SYSTEM)

    ---WHERE ID NOT IN (SELECT TOP 条数*页数  LOG_ID  FROM LOG_SYSTEM)  ---

  4. 4

    --第四种方式:用存储过程的方式进行分页 

    CREATE PROCEDURE PAGE_DEMO

    @TABLENAME VARCHAR(20),

    @PAGESIZE INT,

    @PAGE INT

    AS

    DECLARE @NEWSPAGE INT,

    @RES VARCHAR(100)

    BEGIN

    SET @NEWSPAGE=@PAGESIZE*(@PAGE - 1)

    SET @RES='SELECT * FROM ' +@TABLENAME+ ' ORDER BY LOG_ID OFFSET '+CAST(@NEWSPAGE AS VARCHAR(10)) +' ROWS FETCH NEXT '+ CAST(@PAGESIZE AS VARCHAR(10)) +' ROWS ONLY'

    EXEC(@RES)

    END

    EXEC PAGE_DEMO @TABLENAME='LOG_SYSTEM',@PAGESIZE=3,@PAGE=5

    GO

  5. 5

    小结

    自我感觉第二种方式非常的简单,不冗余因为没有嵌套查询啊,少了Sql语句的嵌套,就少了“视觉上的逻辑”,但是大家一定要切记,这种方式只是适合SqlServer 2012以及更高的版本。由上面的例子可以看出,SqlServer的确挺强大的,但是如果我们缺少发现“功能” 的眼睛的话,Sql Server再强大对我们来说也没有。

    END

注意事项

  • 请注意,使用OFFSET-FETCH的查询必须具有ORDER BY子句。此外,FETCH子句不支持没有OFFSET子句。如果你不想跳过任何行,但是希望使用FETCH筛选,你应当使用OFFSET 0 ROWS来表示。不过,没有FETCH的OFFSET是允许的,这种情况是跳过指定的行数,并返回查询结果中所有剩余行 从支持跳过功能看,OFFSET-FETCH子句比TOP子句更灵活
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论