又快又简单的sql2005分页存储过程
来源:互联网 发布:手游清除游客数据 编辑:程序博客网 时间:2024/04/29 23:27
--又快又简单的sql2005分页存储过程 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
ado recordset的分页技术最慢,嵌套select语句分页其次,存储过程分页则最快。现在的动网论坛存储过程版就是用最后一种方式实现分页。虽然已经有动网论坛的算法可以研究,但参考一下微软MVP的官方算法也不无裨益。下面的文章引自微软techNet月度中文资料光盘速递(2003年4月版)。
++++++++++++
您经常需要使用一次一页的形式来显示一个结果集,并保证用户可以轻松查看各个结果集页面,特别是您在为Web站点开发程序的时候。虽然您可以使用ADO Recordset对象对结果集进行分页,但是这种解决办法不具有伸缩性。
为了解决伸缩性问题,您需要在结果集中包括一个具有唯一ID的列,例如在表中包括一个主键。以下代码介绍了一个简单的例子,它使用两个存储过程在各个页面间进行导航:
CREATE PROCEDURE spGetNextPage
@id varchar(11) =' 0',
@rows int = 0
AS
SET NOCOUNT ON
SET ROWCOUNT @rows
SELECT
a.au_id,
a.au_fname + ' ' + au_lname AS name
FROM
authors a
WHERE
a.au_id > @id
ORDER BY
a.au_id
SET ROWCOUNT 0
SET NOCOUNT OFF
GO
CREATE PROCEDURE spGetPrevPage
@id varchar(11) =' 0',
@rows int = 0
AS
SET NOCOUNT ON
SET ROWCOUNT @ROWS
SELECT
a.au_id,
a.au_fname + ' ' + au_lname AS name
INTO
#temp
FROM
authors a
WHERE
a.au_id <@id
ORDER BY
a.au_id desc
SET ROWCOUNT 0
SELECT
*
FROM
#temp
ORDER BY
au_id
SET ROWCOUNT 0
SET NOCOUNT OFF
本示例所使用的样本数据来自pubs数据库,您可以对authors 表进行分页。如果想返回第一页的前两行数据,您可以使用带有以下参数的spGetNextPage存储过程: EXEC spGetNextPage @id=' 0', @rows=2
spGetNextPage 过程将返回authors表的前两个作者:
172-32-1176 Johnson White Marjorie Green
如需返回接下来的两个作者,您可以将后一行的ID传递给spGetNextPage:
EXEC spGetNextPage @id='213-46-8915', @rows=2
结果页显示:
238-95-7766 Cheryl Carson Michael O'Leary
如果想移动到先前页面,您可以使用第一行的ID调用spGetPrevPage:
EXEC spGetPrevPage @id='238-95-7766', @rows=2
结果将显示了您在前面看到的第一个页面。使用这种方法的一个缺点是具有唯一ID的列决定了结果集的顺序。在本文的情况下, au_id 字段必须在作者姓名字段的前面。
- 又快又简单的sql2005分页存储过程
- --又快又简单的sql2005分页存储过程
- 又是分页存储过程
- 又找到一个很经典的存储过程分页
- 快的存储过程分页
- 分页存储过程sql2005
- sql2005 分页存储过程
- SQL2005分页存储过程
- SQL2005分页存储过程
- SQL2005 分页存储过程
- SQL2005分页存储过程
- SQL2005 分页存储过程
- sql2005分页存储过程
- 四个有用的SQL2005存储过程分页
- sql2005带参数的分页存储过程
- 一个sql2005分页的存储过程
- 又好又快的完成工作任务
- SQL超快的分页存储过程
- Yupoo! 的网站技术架构
- 一生要看的50部经典电影
- 江南六古镇逃票攻略
- 网络最经典命令行
- 解析中国黑客常用的八种工具和防范方法
- 又快又简单的sql2005分页存储过程
- [读书笔记-4] 卓有成效的管理者-用人所长 - 森林木的专栏(fasiondog) - CSDNBlog
- 關於博客內容定位問題.
- NetBeans 编辑 C/C++ Cygwin
- 关键字
- 许三多领导成才是这个世界的真理—— 名人堂之“人生突击”评论 + 转载
- memcache_engine + memcachedb = 高性能分布式内存数据库
- JavaEye网站的RoR性能优化经验谈
- J2ME SDK sites(转)