zoukankan      html  css  js  c++  java
  • 三种SQL分页法

    三种SQL分页法
    表中主键必须为标识列,[ID] int IDENTITY (1,1)

    1.分页方案一:(利用Not In和SELECT TOP分页)

    语句形式: 
    SELECT TOP 页记录数量 *
    FROM 表名
    WHERE (ID NOT IN
      (SELECT TOP (每页行数*(页数-1)) ID
       FROM 表名
       ORDER BY ID))
       ORDER BY ID
    //自己还可以加上一些查询条件


    例:
    select top 2 *
    from Sys_Material_Type
    where (MT_ID not in
        (select top (2*(3-1)) MT_ID from Sys_Material_Type  order by MT_ID))
    order by MT_ID

    2.分页方案二:(利用ID大于多少和SELECT TOP分页)

    语句形式:
    SELECT TOP 每页记录数量 *
    FROM 表名
    WHERE (ID >
              (SELECT MAX(id)
        FROM (SELECT TOP 每页行数*页数 id   FROM 表
               ORDER BY id) AS T)
           )
    ORDER BY ID

    例:
    SELECT TOP 2 *
    FROM Sys_Material_Type
    WHERE (MT_ID >
              (SELECT MAX(MT_ID)
               FROM (SELECT TOP (2*(3-1)) MT_ID
                     FROM Sys_Material_Type
                     ORDER BY MT_ID) AS T))
    ORDER BY MT_ID

    3.分页方案三:(利用SQL的游标存储过程分页)
    create  procedure SqlPager
    @sqlstr nvarchar(4000), --查询字符串
    @currentpage int, --第N页
    @pagesize int --每页行数
    as
    set nocount on
    declare @P1 int, --P1是游标的id
     @rowcount int
    exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1, @rowcount=@rowcount output
    select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
    set @currentpage=(@currentpage-1)*@pagesize+1
    exec sp_cursorfetch @P1,16,@currentpage,@pagesize
    exec sp_cursorclose @P1
    set nocount off

    4.总结:
    其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
    建议优化的时候,加上主键和索引,查询效率会提高。

    通过SQL 查询分析器,显示比较:我的结论是:
    分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
    分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句
    分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用

  • 相关阅读:
    【CoreData】多个数据库使用
    栅格那点儿事(四B)---多波段栅格数据的显示
    栅格那点儿事(四A)---栅格的显示与渲染
    栅格那点儿事(三)---关于压缩
    栅格那点儿事(二)---细看Raster属性
    栅格那点儿事(一)---Raster是个啥子东西
    栅格那点儿事(零)
    ArcMap如何修改地图坐标系统
    ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100)
    什么是TOPO学
  • 原文地址:https://www.cnblogs.com/yzy666/p/1681202.html
Copyright © 2011-2022 走看看