SQL SERVER的有哪几种分页方式

东西: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 页数*条数---     

    3812b31bb051f81976653a43d5b44aed2e73e773.jpg
  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 ---

    a50f4bfbfbedab64dad674c9f836afc379311e16.jpg
  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)  ---

    342ac65c10385343bc6dbe289c13b07eca80881c.jpg
  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

    7acb0a46f21fbe0941d3fa1d64600c338744ad2d.jpg
  5. 5

    小结

    自我感受第二种体例很是的简单,不冗余因为没有嵌套查询啊,少了Sql语句的嵌套,就少了“视觉上的逻辑”,可是大师必然要切记,这种体例只是适合SqlServer 2012以及更高的版本。由上面的例子可以看出,SqlServer简直挺壮大的,可是若是我们贫乏发现“功能” 的眼睛的话,Sql Server再壮大对我们来说也没有。

    6d81800a19d8bc3e29dd35bb8d8ba61ea9d345ed.jpg
  • 发表于 2019-10-28 22:57
  • 阅读 ( 1316 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
联系我们:uytrv@hotmail.com 问答工具