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