登录注册豆瓣社区豆瓣读书豆瓣电影豆瓣音乐豆瓣同城豆瓣FM更多r
九点阿尔法城豆瓣猜发现小站线上活动木耳先生的日记r
木耳先生的主页广播相册喜欢二手活动发豆邮【sql专业】SqlServer面试题r
20100305060548r
【SQLServer面试题(实际应用,分页管理)】r
管理结果集的分页r
问:我怎样才能使用SQLServer对结果集的分页进行管理?r
r
答:您经常需要使用一次一页的形式来显示一个结果集,并保证用户可以轻松查看各个结果集页面,特别是您在为Web站点开发程序的时候。虽然您可以使用ADORecordset对象对结果集进行分页,但是这种解决办法不具有伸缩性。r
r
为了解决伸缩性问题,您需要在结果集中包括一个具有唯一ID的列,例如在表中包括一个主键。以下代码介绍了一个简单的例子,它使用两个存储过程在各个页面间进行导航:r
r
CreatePROCEDUREspGetNextPager
idvarchar110r
rowsi
t0r
ASr
r
SETNOCOUNTONr
SETROWCOUNTrowsr
r
Selectr
aau_idr
aau_f
ameau_l
ameAS
amer
FROMr
authorsar
Wherer
aau_ididr
orDERBYr
aau_idr
r
SETROWCOUNT0r
SETNOCOUNTOFFr
GOr
r
CreatePROCEDUREspGetPrevPager
idvarchar110r
rowsi
t0r
ASr
r
SETNOCOUNTONr
SETROWCOUNTROWSr
r
Selectr
aau_idr
aau_f
ameau_l
ameAS
amer
INTOr
tempr
FROMr
authorsar
Wherer
aau_ididr
orDERBYr
aau_iddescr
r
SETROWCOUNT0r
r
Selectr
r
FROMr
tempr
orDERBYr
au_idr
r
SETROWCOUNT0r
SETNOCOUNTOFFr
r
r
本示例所使用的样本数据来自pubs数据库,您可以对authors表进行分页。如果想返回第一页的前两行数据,您可以使用带有以下参数的spGetNextPage存储过程:EXECspGetNextPageid0rows2r
r
spGetNextPage过程将返回authors表的前两个作者:r
r
172321176Joh
so
WhiteMarjorieGree
r
如需返回接下来的两个作者,您可以将后一行的ID传递给spGetNextPage:r
r
EXECspGetNextPageid213468915rows2r
结果页显示:r
r
238957766CherylCarso
MichaelOLearyr
如果想移动到先前页面,您可以使用第一行的ID调用spGetPrevPage:r
r
EXECspGetPrevPageid238957766rows2r
结果将显示了您在前面看到的第一个页面。使用这种方法的一个缺点是具有唯一ID的列决定了结果集的顺序。在本文的情况下,au_id字段必须在作者姓名字段的前面。r
r
r
r
r
r
r
r
r
r
r
【SQLServer面试题(实际应用)】r
排序顺序会影响系统性能吗?r
r
问:一些资料介绍说,在SQLServer65中,排序方式会对系统性能造成影响,但是我并没有发现有针对SQLServer2000或SQLServer70的类似说法。我想知道二分法检索对SQLServer2000程序到底有何意义。SQLServer2000所支持的各种排序方式之间在执行性能上存在哪些差异呢?r
r
答:r