最近公司的服务器太慢~于是开始对很多地方的代码进行修改~当然也包括分页这块~以前公司的网站是用ASP+SQL2000开发的,所以基本上都没有用上存储过程,在数据渐渐曾大的时候,显然很多地方都需要优化,我个人认为ASP使用SQL的性能不是太好,现在我开始用ASP.NET+SQL2005开发!我看过很多网上对分页的设计方案,当然也有很多很经典的,不过我认为,在分页这块的解决方法应该看重的是针对性而不应该是通用性!很多写的很好的存储过程,有很好的通用性,甚至可以直接使用,但我想那不是适合每个人的!
以下是我的存储过程:
 
 create  [dbo].[setpage]
@fistid nvarchar(4), --//类型ID
@pagetype int,--//当前页的 类型
@pagecount int,--//当前页数
@numcount int,--//总记录
@numpage int  --//总页数
as
if @pagetype=0 --判断是不是首页
  begin
   select top  10 Bus_ID, Ent_ID,ClassID,Bus_Title,Bus_Remark,Bus_AddTime from Ece_Business where left(ClassNumber,4)=@fistid and Ent_ID is not null  order by Bus_ID
  end
 if @pagetype=1--判断是不是尾页
  begin
    select top(@numcount-(@numpage-1)*10)Bus_ID,Ent_ID,ClassID, Bus_Title,Bus_Remark,Bus_AddTime from Ece_Business where left(ClassNumber,4)=@fistid and Ent_ID is not null  order by Bus_ID desc
  end
if(@pagetype=2)
begin

if @pagecount<@numpage
begin
 if @pagecount>0
begin
select top 10 Bus_ID,Ent_ID,ClassID,Bus_Title,Bus_Remark,Bus_AddTime from Ece_Business  where left(ClassNumber,4)=@fistid and Bus_ID>(selecT max(aa.bus_id) from (select top(@pagecount*10) bus_id  from dbo.Ece_Business where left(ClassNumber,4)=@fistid order by bus_id)as aa) and Ent_ID is not null  order by Bus_ID   
end
 else
   begin
    select top  10 Bus_ID, Ent_ID,ClassID,Bus_Title,Bus_Remark,Bus_AddTime from Ece_Business where left(ClassNumber,4)=@fistid and Ent_ID is not null  order by Bus_ID
   end
end
else
begin
select top(@numcount-(@numpage-1)*10)Bus_ID,Ent_ID,ClassID, Bus_Title,Bus_Remark,Bus_AddTime from Ece_Business where left(ClassNumber,4)=@fistid and Ent_ID is not null order by Bus_ID desc
-----这个是判断是否是尾页了
end
end
可以看出实际我只用了三句,而且每次都只查询10条,所以查询速度很快~虽然我不敢说着个是最好的,但是我想是比较适合我们公司的,其实思路就是判断三中情况!首页,尾页,然后就是中间页,把每页显示的数据的最大ID,当作下页的开始ID,我相信只要写过SQL的都应该看的懂,在这里只是介绍种思路,希望有其他好方法的可以提出来 ,在这里我就不多讲了!