键盘人生

After all,tomorrow is another day

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

原帖:http://blog.csdn.net/tegwy/archive/2009/05/20/4204448.aspx

 

最近个项目需要用到SQL SERVER 2005的数据库,曾记得以前用2000的时候分页程序的SQL语句一直是个问题,不是效率不高就是难以理解。这次在网上查找资料的时候发现SQL SERVER 2005分页时的语句已经大有改变,先看语句:

  1. WITH Article_CTE AS (  
  2.     SELECT *, ROW_NUMBER() OVER (ORDER BY [ArticleId]) AS RowNumber FROM n_Article  
  3. )  
  4. SELECT * FROM Article_CTE  
  5. WHERE RowNumber BETWEEN 0 AND 10  

 

在SQL SERVER 2005中新引入了ROW_NUMBER()函数,配合后面的OVER按某字段进行排序然后再通过设置其范围来达到分页查询的目的,这样与Oracle中根据rownum字段进行分页查询便大同小异了。

首页用WITH创建个临时命名的结果集(这些结果集称为公用表表达式 (CTE)),对表中的每行先排序再设置其RowNumber数据,然后通过select查询,通过where设置查询条件来到达分页的目的。貌似在这过程中还是对表进行了全部查询,如果排序的字段很大很长的话也会很慢的,感觉还是没有Oracle的rownum效率高

posted on 2010-09-10 14:15  Dr.Wang  阅读(1931)  评论(0编辑  收藏  举报