[摘要]/*****听以前的同事说asp页面上的分页太慢了(如果数据多了), 就想了这么个笨办法。有些地方还要考虑----比如select top 22 * from cat_list where T_id...
                        /*****听以前的同事说asp页面上的分页太慢了(如果数据多了), 
就想了这么个笨办法。有些地方还要考虑----比如select top 22 * from cat_list 
where T_id not in (select T_id from #change)是否有效率问题;数据不能重复等等 
不过灵活性挺好。希望各位高手再给帮忙改正;多谢chair3的帮助---这个存储过程还可以在加入几个变量,随便大家改吧:)*****/ 
CREATE proc page 
@pagenum int 
as 
SET NOCOUNT ON /*-----这一句很重要哦:)),不然它只会认 insert #change......这个数据集:))*/ 
declare @sql nvarchar(500) --声明动态sql执行语句 
declare @pagecount int --当前页数 
--取得当前数据库的记录总数 
declare @row_num int 
begin 
select @row_num=count(*) from cat_list 
--创建临时表,作为数据过滤 
create table #change (T_id int) 
--判断当前页数 
if @row_num>6 --大于页面显示记录数,则分页 
begin 
set @row_num=@pagenum*6 
if @row_num=6 
select top 6 * from cat_list 
else 
begin 
set @row_num=(@pagenum-1)*6 
set @pagecount=@row_num 
set @sql=N'insert #change (T_id) select top '+cast(@pagecount as char(100))+' T_id from cat_list where T_id not in (select T_id from #change)' 
exec sp_executesql @sql 
select top 6 * from cat_list where T_id not in (select T_id from #change) 
end 
end 
else --只现实全部的数据 
select * from cat_list 
end 
GO 
客户端这样调用: 
<% dim T_com 
dim T_rs'declare datamanage recordset 
dim parameters 
set T_com=server.createobject("adodb.command") 
T_com.ActiveConnection=conn 
T_com.CommandText="page" 
T_com.CommandType=adCmdStoredProc 
'T_com.Prepared=true 
set parameters=T_com.CreateParameter("@pagenum",adInteger,adParamInput) 
T_com.Parameters.Append parameters 
dim page 
page=request.QueryString("page") 
if page="" then 
page=1 
end if 
T_com("@pagenum")=page 
set T_rs=T_com.Execute 
do while not T_rs.eof 
response.Write T_rs("c_name") 
T_rs.movenext 
loop 
%> 
ddddd 
(出处:Viphot)  
关键词:asp写的一个分页程序