SQL----分页存储过程

本文介绍使用AspNetPager控件进行论坛帖子列表分页的方法,重点讲解如何通过存储过程实现高效的数据分页查询,避免资源浪费。

 

做论坛帖子列表时用到了AspNetPager控件,这是一个纯分页用的控件,与数据毫无关系。在分页时需要自己写存储过程。一开始用select top 10 * from A WHERE id not in (select top 10 id from A )来做,有个问题:sqlsqrver2000中,top后面不能跟变量,这直接导致这种方法失效,而且这样做也很浪费资源。
于是,换了个做法:

ALTER PROCEDURE dbo.StoredProcedure1
(@startIndex int,    //每页起始id
@endIndex int,    //每页完毕id
@Forum_Id int,    //版块id
@State int    //帖子状态
)
as
set nocount on
declare @indextable table(id int identity(1,1),nid int)    //定义一个临时表,用来存储查询全部结果的顺序号,从1开始一直到记录总数
set rowcount @endIndex
insert into @indextable(nid)     //将查询结果写入新表,并自动生成顺序号
select Id from Topic
WHERE (Topic.Forum_Id = @Forum_Id)
AND (Topic.State != @State)
order by Topic.Issue_Date DESC    //这里的排序方式必须和下面的排序一致

SELECT Topic.*, UserInfo.User_Name FROM Topic     //按每页(endIndex-startIndex)条,显示查询符合条件主题的帖子
INNER JOIN UserInfo ON Topic.User_Id = UserInfo.Id
INNER JOIN @indextable t ON Topic.Id=t.nid
WHERE (Topic.Forum_Id = @Forum_Id)
AND (Topic.State != @State)     //查询除了置顶帖(3)以外的帖子,并按发表时间降序排列
AND (t.id between @startIndex and @endIndex) order by Topic.Issue_Date DESC
set nocount off
RETURN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值