[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或以上实现

转载于:https://www.cnblogs.com/litou/archive/2011/10/28/2227852.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值