SQL2005增加了不少新特性,其中NTILE和ROW_NUMER使得我们不再为SQL如何灵活方便的分页伤脑筋了(不必再羡慕Oracle等数据库了)。
  下面就是一个很简单的分页查询语句:
SQL2005的简单分页程序DECLARE @rows_per_page AS INTEGER
SQL2005的简单分页程序
DECLARE @current_page AS INTEGER
SQL2005的简单分页程序
DECLARE @total_pages AS INTEGER
SQL2005的简单分页程序
SQL2005的简单分页程序
-- 设置每页的行数
SQL2005的简单分页程序
SET @rows_per_page = 20
SQL2005的简单分页程序
-- 设置要显示的页号(从1开始)
SQL2005的简单分页程序
SET @current_page = 2
SQL2005的简单分页程序
-- 计算总页数
SQL2005的简单分页程序
SELECT @total_pages = COUNT(*/ @rows_per_page
SQL2005的简单分页程序
FROM testtable;
SQL2005的简单分页程序
SQL2005的简单分页程序
-- 列出指定页的内容
SQL2005的简单分页程序
WITH t AS
SQL2005的简单分页程序(
SQL2005的简单分页程序  
SELECT NTILE(@total_pagesOVER(ORDER BY id) AS page_number, * 
SQL2005的简单分页程序  
FROM testtable
SQL2005的简单分页程序)
SQL2005的简单分页程序
SELECT * from t 
SQL2005的简单分页程序
WHERE page_number = @current_page 
  程序简单到可以不用说明的程度。
  我们可以利用上述简单的语句,变化排序条件和查询表,就可以做出一个很通用的分页查询的存储过程或查询语句了。

  同样的,使用ROW_NUMBER也可以做到分页查询:
SQL2005的简单分页程序DECLARE @rows_per_page AS INTEGER
SQL2005的简单分页程序
DECLARE @current_page AS INTEGER
SQL2005的简单分页程序
DECLARE @start_row_num AS INTEGER
SQL2005的简单分页程序
SQL2005的简单分页程序
-- 设置每页的行数
SQL2005的简单分页程序
SET @rows_per_page = 20
SQL2005的简单分页程序
-- 设置要显示的页号(从1开始)
SQL2005的简单分页程序
SET @current_page = 2
SQL2005的简单分页程序
-- 设置开始行号
SQL2005的简单分页程序
SET @start_row_num = (@current_page - 1) * @rows_per_page
SQL2005的简单分页程序
SQL2005的简单分页程序
WITH t AS
SQL2005的简单分页程序(
SQL2005的简单分页程序  
SELECT ROW_NUMBER() OVER(ORDER BY id) AS row_number, * 
SQL2005的简单分页程序  
FROM testtable
SQL2005的简单分页程序)
SQL2005的简单分页程序
SELECT * from t 
SQL2005的简单分页程序
WHERE row_number BETWEEN @start_row_num AND @start_row_num + @rows_per_page
  似乎更简单的样子。

  至于哪种效率更高,这需要大家实际测试了。

相关文章:

  • 2021-09-20
  • 2022-12-23
  • 2022-12-23
  • 2021-09-14
  • 2021-07-29
  • 2022-12-23
  • 2021-08-23
  • 2021-12-05
猜你喜欢
  • 2021-07-19
  • 2021-09-02
  • 2022-12-23
  • 2022-01-11
  • 2021-10-17
  • 2022-02-23
  • 2022-12-23
相关资源
相似解决方案