阅读:2464回复:1
怎样才能使用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 |
|
1楼#
发布于:2004-04-07 13:35
本示例所使用的样本数据来自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 字段必须在作者姓名字段的前面。 — SQL Server MVPs |
|