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,这种方法还是比较好用的。

posted @ 2008-10-11 23:37  freezym  阅读(249)  评论(0编辑  收藏  举报