zoukankan      html  css  js  c++  java
  • 【SQLServer】SQL Server 2000的分页方法(SQL篇)

    不像SQL Server 2005提供ROW_NUMBER()和Oracle的ROWNUM伪列,SQL Server 2000本身无提供方便的分页方法,但可用select top的混合SQL语句实现。

    方法A:结合not in和select top

    SELECT TOP 页长 * FROM {表名}

    WHERE {字段} NOT IN (

      SELECT TOP 页长*(页数-1) {字段} FROM {表名} ORDER BY {排序字段}

    )

    ORDER BY {排序字段}

    点评:语句简单,但not in的字段不能有重复数据

    性能:页数越靠后越慢

    限制:只适合使用主键字段not in

    --------------------------------------------------

    方法B:结合>和select top

    SELECT TOP 页长 * FROM {表名}

    WHERE {字段} > (

      SELECT MAX({字段}) FROM (

        SELECT TOP 页长*(页数-1) {字段} FROM {表名} ORDER BY {排序字段}

      )

    )

    ORDER BY {排序字段}

    点评:跟方法A类似,但语句比方法A多一层查询。

    性能:页数越靠后越慢,但由于使用数字型字段,比方法A快

    限制:只适合主键字段是数字型并且最好是自增的

    --------------------------------------------------

    方法C:结合双select top和相反排序

    SELECT * FROM (

      SELECT TOP 页长 * FROM (

        SELECT TOP 页长*页数 * FROM {表名}

      ) ORDER BY {排序字段} ASC

    ) ORDER BY {排序字段} DESC

    点评:与上面两种方法不一样,此方法对字段类型无任何要求,且最里层语句结构可随意(需添加top 页长*页数),此方法依赖互斥的排序

    性能:页数越靠后越慢,但可改进为,当查询数据位置位于数据总数后半部分时,前一个排序改为倒序,后一个排序改为顺序

    限制:必须排序,且需要特别处理最后一页情况(最后一页时最里层是top 记录总数%页长)

    以上方法均可在SQL SERVER 2000或以上实现

  • 相关阅读:
    ostringstream的使用方法
    《算法导论》为什么经典
    JAVA数组的定义及用法
    具体解释Android中AsyncTask的使用
    POJ 1207 The 3n + 1 problem
    图像切割之(五)活动轮廓模型之Snake模型简单介绍
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
    线程安全和线程不安全理解
    atitit...触发器机制 ltrigger mechanism sumup .的总结O8f
    winrar3.7-winrar4.0的注冊码
  • 原文地址:https://www.cnblogs.com/litou/p/2227852.html
Copyright © 2011-2022 走看看