SQL分页查找总结


摸索了几天SQL分页查找,找到了几种方法。

做个总结(纯粹个人见解):

方法一:

以 SELECT TOP @pageSize * FROM table WHERE id NOT IN (SELECT TOP(@pageStartIndex-1) id FROM table) 的形式查找。

这种方法完全自身完成,但表必须具备标识id,而且如果查询需要多重排序时,这种方法会显得非常复杂。

方法二:

利用临时表,将表安要求排序,并添加相映id,之后再对临时表进行查询。

SElECT id=IDENTITY(int,1,1),* INTO #tb2 FROM table

SELECT * FROM #tb WHERE id BETWEEN @pageStartIndex AND (@pageStartIndex+@pageSize-1)

这种方法仅适用没有标识id的表,因为创临时表时就进行排序,所以复杂排序也可显得明了。但我觉得大部分表都有标识列,这个方法很多时候会用不上。

方法三:

在SQLServer 2005下可使用ROW_NUMBER()函数,貌似一种内部先创建了索引的方法。

SELECT * FROM (SELECT ROW_NUMBER() OVER (order by id desc) as pos from table) WHERE pos BETWEEN @pageStartIndex AND (@pageStartIndex+@pageSize-1)

对于SQLServer 2005,这种方法还是比较好用的。

优质内容筛选与推荐>>
1、关于CALayer 中的contents(图片) 拉伸
2、QQ圈子,是在这里在一起,还是在那时在一起?
3、802.11 wireless 六
4、一个很好地免费域名dot.tk
5、docker chown: changing ownership of '/var/lib/XXX': Permission denied


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号