自己写的关于分页的存储过程
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的都应该看的懂,在这里只是介绍种思路,希望有其他好方法的可以提出来 ,在这里我就不多讲了!本文出自 “蜕变” 博客,谢绝转载!
以下是我的存储过程:
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的都应该看的懂,在这里只是介绍种思路,希望有其他好方法的可以提出来 ,在这里我就不多讲了!本文出自 “蜕变” 博客,谢绝转载!
相关文章推荐
- 自己总结的分页存储过程,不足之处请大家指点出来,我也努力更正
- 李洪根关于[SQL]对于分页存储过程
- 关于coolite grid 存储过程分页的问题,忘大虾解决...
- 自己整理的一些分页存储过程
- 学习存储过程的时候参看的两个DVBBS的存储过程和两个初步了解后自己写的存储过程(带分页的)
- 李洪根关于[SQL]对于分页存储过程
- 自己写的带分页的存储过程
- 记录一条自己常用的分页存储过程
- 从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程
- sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】
- 自己改造的分页存储过程
- 自己收集比较强大的分页存储过程 推荐
- 关于SQL分页存储过程的分析
- 关于SQL存储过程分页的研究
- 关于分页存储过程的优化【让数据库按我们的意思执行查询计划】
- 以前自己写的一个分页的存储过程
- 分页存储过程:自己写的
- 自己写的基于窗体函数的分页存储过程
- 自己修改一个别人的sql2005通用存储过程分页
- 自己写的SQL存储过程分页方法