分享

SQL分页语句 ( 转自牛腩老师的博客 )

 昵称10504424 2013-02-19
sql server2000方法:

 

 

Sql代码 复制代码 收藏代码
  1. select top 每页显示的记录数 * from topic where id not in  
  2.  (select top (当前的页数-1)×每页显示的记录数 id from topic order by id desc)   
  3.  order by id desc  

    需要注意的是在access中不能是top 0,所以如果数据只有一页的话就得做判断了。。

 

②sql server2005中的分页代码:

 

 

Sql代码 复制代码 收藏代码
  1. with temptbl as (   
  2.   SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS Row,    
  3.   ...   
  4. )   
  5. SELECT * FROM temptbl where Row between @startIndex and @endIndex  

 该方法说明:创建一个临时表,表中加一列元素ROW,然后按照ROW的大小取出相应的页的数据(主要用于web开发分页管理)

   实例:

 

Sql代码 复制代码 收藏代码
  1. with temptbl as (   
  2.   SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS 行号,* from news   
  3. )   
  4. SELECT * FROM temptbl where 行号 between 9 and 16  

 

 

 

 

 

补充:

 

11 楼 niunan 2009-07-22   引用

自己在网上找了一下。。发现http://hi.baidu.com/fuhengyu/blog/item/adb30aafe4df88c87cd92ae9.html
有个分页存储过程,觉得蛮简单的,弄下来在自己的机子上测试了一下,发现出错,自己更改了一下错误,改后的分页存储过程如下:

Sql代码 复制代码 收藏代码
  1. SET ANSI_NULLS ON  
  2. GO   
  3. SET QUOTED_IDENTIFIER ON  
  4. GO   
  5. -- =============================================   
  6. -- Author:      牛腩   
  7. -- Create date: 2009-07-22 12:41   
  8. -- Description: 分页,用到了ROW_NUMBER()   
  9. -- =============================================   
  10. ALTER PROCEDURE [dbo].[proc_ShowPage]   
  11. @tblName   varchar(255),       -- 表名   
  12. @strGetFields varchar(1000) = '*'-- 需要返回的列,默认*   
  13. @strOrder varchar(255)='',      -- 排序的字段名,必填   
  14. @strOrderType varchar(10)='ASC'-- 排序的方式,默认ASC   
  15. @PageSize   int = 10,          -- 页尺寸,默认10   
  16. @PageIndex int = 1,           -- 页码,默认1   
  17. @strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)   
  18. AS  
  19.   
  20. declare @strSQL   varchar(5000)   
  21.   
  22. if @strWhere !=''  
  23. set @strWhere=' where '+@strWhere   
  24.   
  25. set @strSQL=   
  26. 'SELECT * FROM ('+   
  27.     'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strGetFields+' '+   
  28.     'FROM ['+@tblName+'] '+@strWhere+   
  29. ') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)   
  30.   
  31. exec (@strSQL)   
  32. print @strSQL  -- 测试用,可在查询的时候看到生成的SQL语句  
 

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多