您的位置:首页 > 其它

自己写的关于分页的存储过程

2007-07-26 13:42 323 查看
最近公司的服务器太慢~于是开始对很多地方的代码进行修改~当然也包括分页这块~以前公司的网站是用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的都应该看的懂,在这里只是介绍种思路,希望有其他好方法的可以提出来 ,在这里我就不多讲了!本文出自 “蜕变” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: