Dzwebs.Net

撰写电脑技术杂文十余年

SQL2005使用NTILE和ROW_NUMER为查询实现分页

Admin | 2007-11-10 11:30:45 | 被阅次数 | 13236

温馨提示!

如果未能解决您的问题,请点击搜索;登陆可复制文章,点击登陆
下面就是一个很简单的分页查询语句:  
DECLARE   @rows_per_page   AS   INTEGER
DECLARE   @current_page   AS   INTEGER
DECLARE   @total_pages   AS   INTEGER

--   设置每页的行数
SET   @rows_per_page   =   20
--   设置要显示的页号(从1开始)
SET   @current_page   =   2
--   计算总页数
SELECT   @total_pages   =   COUNT(*)   /   @rows_per_page
FROM   testtable;

--   列出指定页的内容
WITH   t   AS
(
    SELECT   NTILE(@total_pages)   OVER(ORDER   BY   id)   AS   page_number,   *  
    FROM   testtable
)
SELECT   *   from   t  
WHERE   page_number   =   @current_page     程序简单到可以不用说明的程度。
  我们可以利用上述简单的语句,变化排序条件和查询表,就可以做出一个很通用的分页查询的存储过程或查询语句了。

  同样的,使用ROW_NUMBER也可以做到分页查询:
DECLARE   @rows_per_page   AS   INTEGER
DECLARE   @current_page   AS   INTEGER
DECLARE   @start_row_num   AS   INTEGER

--   设置每页的行数
SET   @rows_per_page   =   20
--   设置要显示的页号(从1开始)
SET   @current_page   =   2
--   设置开始行号
SET   @start_row_num   =   (@current_page   -   1)   *   @rows_per_page

WITH   t   AS
(
    SELECT   ROW_NUMBER()   OVER(ORDER   BY   id)   AS   row_number,   *  
    FROM   testtable
)
SELECT   *   from   t  
WHERE   row_number   BETWEEN   @start_row_num   AND   @start_row_num   +   @rows_per_page  似乎更简单的样子。

网站备案号:

网站备案号:滇ICP备11001339号-7

版权属性:

Copyright 2007-2021-forever Inc. all Rights Reserved.

联系方式:

Email:dzwebs@126.com QQ:83539231