SQL Server 2000只是DBMS,并不具备应用程序界面设计功能(2005的reporting service是新的扩展),你的思路应该从应用程序的容器去发掘分页的功能,比如datagrid,datalist等
没错,通过存储过程我可以得到结果集了,现在我就希望能通过asp程序将其分页显示啊,难道没有办法吗?
首先,你做个存储过程的分页参数定为,显示条目数,第几页,以及你可能需要的判定值等 然后在ASP中取表的中的这些值直接存储过程就能得到分页的数据结果集我有写过的一个,但这个有点是多表模糊查询的 你自己研究create proc mh_provide_info(@name varchar(500),@page int,@crent_page int)----分页的供应商询价单信息,@page显示数,@crent_page当前页,模糊查询 as begin SET NOCOUNT ON declare @sql varchar(2000), @p int set @p=@page*(@crent_page-1) set @sql='' select @sql=@sql+' or c.name like '''+'%'+pro_name+'%'+'''' from dbo.provide_info where pro_name like ''+'%'+@name+'%'+'' set @sql=' select top '+rtrim(convert(varchar,@page))+' * from (select * from ( select paskinfo_id,stuff(dbo.l_name(paskinfo_id),1,1,'''') as name,pask_date,state from dbo.pro_askinfo ) c where ' +stuff(@sql,1,3,'')+') e where e.paskinfo_id not in (select top '+rtrim(convert(varchar,@p))+' paskinfo_id from (select * from ( select paskinfo_id,stuff(dbo.l_name(paskinfo_id),1,1,'''') as name,pask_date,state from dbo.pro_askinfo ) c where '+stuff(@sql,1,3,'')+') f order by f.paskinfo_id desc) order by e.paskinfo_id desc ' exec (@sql) SET NOCOUNT Off end 这是个模糊查询的,牵连多表 其中就涉及分页的
假设存储过程已经在系统中使用了,不能修改,比如是系统存储过程或者加密的存储过程。create table #tb (Text varchar(1000) ) ---#tb 数据库结构和存储过程返回的结果结构一概一样。这里随便写一下。 insert #tb exec exec p_exam '2','','' ---这句话把存储过程执行结果返回到临时表里。 select * from #tb--drop table #tb 再把这个#tb表分页,分页的原理declare @SQLStr varchar(8000) set @SQLStr='SELECT Top '+cast(@每页大小 as varchar)+' * FROM 表 WHERE 主键列 NOT IN (SELECT TOP '+cast(@每页大小*@第几页 as varchar)+' 主键列 from 表 )' exec(@SQLStr)可以根据自己的实际情况把分页后的结果做缓存。缓存方法1:缓存在数据库的若干小表里,命名 myChachePage1,myChachePage2等 缓存方法2:缓存在XML,参考关于XML的存储过程。 sp_xml_preparedocument 、sp_xml_removedocument 等 缓存方法3:直接生成静态页面,Page1,Page2等,参考sp_makewebtask 存储过程 缓存方法4:在.net开发中有关于缓存的强大支持,请研究.net 的System.Web.Caching 命名空间
比如执行exec p_exam '2','',''显示很多记录。如何将这个执行存储过程在asp中分页显示。
请高手给个例子,谢谢!
楼主也可以到CSDN的ASP.NET去搜索一下
看看这个,是不是达到你的要求
然后在ASP中取表的中的这些值直接存储过程就能得到分页的数据结果集我有写过的一个,但这个有点是多表模糊查询的
你自己研究create proc mh_provide_info(@name varchar(500),@page int,@crent_page int)----分页的供应商询价单信息,@page显示数,@crent_page当前页,模糊查询
as
begin
SET NOCOUNT ON
declare
@sql varchar(2000),
@p int
set @p=@page*(@crent_page-1)
set @sql=''
select @sql=@sql+' or c.name like '''+'%'+pro_name+'%'+''''
from dbo.provide_info
where pro_name like ''+'%'+@name+'%'+''
set @sql='
select top '+rtrim(convert(varchar,@page))+' *
from
(select *
from (
select paskinfo_id,stuff(dbo.l_name(paskinfo_id),1,1,'''') as name,pask_date,state
from dbo.pro_askinfo ) c where ' +stuff(@sql,1,3,'')+') e
where e.paskinfo_id not in (select top '+rtrim(convert(varchar,@p))+' paskinfo_id
from
(select *
from (
select paskinfo_id,stuff(dbo.l_name(paskinfo_id),1,1,'''') as name,pask_date,state
from dbo.pro_askinfo ) c where '+stuff(@sql,1,3,'')+') f
order by f.paskinfo_id desc)
order by e.paskinfo_id desc
'
exec (@sql)
SET NOCOUNT Off
end
这是个模糊查询的,牵连多表
其中就涉及分页的
---#tb 数据库结构和存储过程返回的结果结构一概一样。这里随便写一下。
insert #tb exec exec p_exam '2','',''
---这句话把存储过程执行结果返回到临时表里。
select * from #tb--drop table #tb 再把这个#tb表分页,分页的原理declare @SQLStr varchar(8000)
set @SQLStr='SELECT Top '+cast(@每页大小 as varchar)+' * FROM 表 WHERE 主键列 NOT IN (SELECT TOP '+cast(@每页大小*@第几页 as varchar)+' 主键列 from 表 )'
exec(@SQLStr)可以根据自己的实际情况把分页后的结果做缓存。缓存方法1:缓存在数据库的若干小表里,命名 myChachePage1,myChachePage2等
缓存方法2:缓存在XML,参考关于XML的存储过程。
sp_xml_preparedocument 、sp_xml_removedocument 等
缓存方法3:直接生成静态页面,Page1,Page2等,参考sp_makewebtask 存储过程
缓存方法4:在.net开发中有关于缓存的强大支持,请研究.net 的System.Web.Caching 命名空间
其实你没必要这么复杂的
我做的那个是模糊查询随便找个ASP分页程序,然后加上查询语句就完了,很简单的