Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1258699
  • 博文数量: 510
  • 博客积分: 20296
  • 博客等级: 上将
  • 技术积分: 4680
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-30 03:58
文章存档

2011年(13)

2010年(92)

2009年(242)

2008年(163)

我的朋友

分类: 数据库开发技术

2009-04-13 02:33:34

 内容摘要:管理结果集的分页 

 问:我怎样才能使用SQL Server对结果集的分页进行管理? 
 

管理结果集的分页
问:我怎样才能使用SQL Server对结果集的分页进行管理?

答:您经常需要使用一次一页的形式来显示一个结果集,并保证用户可以轻松查看各个结果集页面,特别是您在为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

SQL Server面试题(实际应用,分页管理)一文收集自互联网。

阅读(941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~