带查询条件的asp分页(存储过程)

redondo520 2006-08-10 09:04:46
asp页面提供多个查询条件,有些信息分别存在几个表里,需要通过ID关联起来,现在的分页方法就是把数据集rs取出来后放在session里,翻页的时候再从rs里取,这种方法不方便清除rs,感觉会占用蛮多的服务器资源,如果用存储过程实现该功能,这个存储过程该怎么写,求高手帮忙。
...全文
200 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
redondo520 2006-08-10
  • 打赏
  • 举报
回复
算了,还是放在页面参数里传递吧
你也叫风语者 2006-08-10
  • 打赏
  • 举报
回复
我这个存储过程,SQL语句写在存储过程外面,输入到存储过程中的参数会少些。
--------------------------------------------------------
/*
模块名称: ProcGetPage

开发时间: 2006-8-2
功能说明: 分页
参数说明:
返回说明:
@SQLSTR 查询字符串
@SQLSTR2 取得查询总记录条数
@PAGECOUNT 第N页
@PAGESIZE 每页行数
*/
CREATE PROCEDURE ProcGetPage

@SQLSTR NVARCHAR(4000)
,@SQLSTR2 NVARCHAR(4000)
,@PAGECOUNT INT=1
,@PAGESIZE INT=99999999
AS
SET NOCOUNT ON
DECLARE @P1 INT

SET @PAGECOUNT=(@PAGECOUNT-1)*@PAGESIZE+1

EXECUTE(@SQLSTR2)
EXEC sp_cursoropen @P1 OUTPUT,@SQLSTR
EXEC sp_cursorfetch @P1,16,@PAGECOUNT,@PAGESIZE
EXEC sp_cursorclose @P1

go


---------------------------------------------------------
ASP
<%

sql = "select * from [table] where 条件"
sql2 = "select count(1) from [table]"

sql = "Exec bbs_ProcIndex '"&sql&"','"&sql2&"',"&page&" ,"&PageSize&""
set rs = conn.execute(sql)
if rs.eof then
rCount = rs(0)
set rs1 = rs.NextRecordset
PageCount=CInt(rCount\PageSize+1)
……
……
end if

%>
redondo520 2006-08-10
  • 打赏
  • 举报
回复
谢谢你的答复,但是客户端产生过多的session,在访问量大的时候应该也会对服务器影响蛮大,有什么更好的解决方法吗?
  • 打赏
  • 举报
回复
方法多样,其中一种也是用session是把查询条件放到session里

尽量不要把rs放到session
redondo520 2006-08-10
  • 打赏
  • 举报
回复
假如我查出了第一页的结果,再翻页的时候怎么把查询条件的参数传到存储过程里呢?(查询结果是在新窗口中显示的)
  • 打赏
  • 举报
回复
通用分页存储过程都可以的

CREATE PROCEDURE sp_page(
@tb varchar(50), --表名
@collist varchar(800), --要查询出的字段列表,*表示全部字段
@pagesize int, --每页记录数
@page int, --指定页
@where varchar(800), --where查询条件 (不带WHERE)
@orderby varchar(800), -- order by 条件
@records int OUTPUT --总记录数
)
AS
DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)
IF @where is null or rtrim(@where)=''
BEGIN--没有查询条件
SET @where1=' WHERE '
SET @where2=' '
END
ELSE
BEGIN--有查询条件
SET @where1=' WHERE ('+@where+') AND '--本来有条件再加上此条件
SET @where2=' WHERE ('+@where+') '--原本没有条件而加上此条件
END
Set @sql='select @records = count(*) from '+@tb+@where2
EXEC sp_executesql @sql,N'@records int OUTPUT',@records OUTPUT--计算总记录数
--set @pages=CEILING((COUNT(*)+0.0) / @pagesize)
--最多只能查询10页
IF @page>100
SET @page=100
IF @page=1
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+ @where2+' '+@orderby
ELSE
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+ ' FROM '+@tb+@where1+'ID NOT IN (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' ID FROM '+@tb+@where2+' '+@orderby+') '+@orderby
EXEC(@sql)

GO
future914 2006-08-10
  • 打赏
  • 举报
回复
学习

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧