注册 登录
编程论坛 ASP技术论坛

[求助]求一个高效ASP分页存储过程!谢谢!

gupiao175 发布于 2007-10-15 17:04, 1232 次点击
求一个高效ASP分页存储过程!能正常应对百万条数据!

最好能附加上使用说明,非常感谢!
6 回复
#2
cainiao1582007-10-15 22:25

帖子里有很多,你搜索一下吧

#3
gupiao1752007-10-16 00:58

分页存储过程找了只有一个,而且效率也不高,执行分页上百万条数据时,根本执行不了!10万以内还马马虎虎!

加了这句Server.ScriptTimeOut=999999999,虽然脚本没超时,可提示Microsoft OLE DB Provider for SQL Server (0x80040E31)超时已过期!

#4
天涯听雨2007-10-16 13:07
https://bbs.bc-cn.net/viewthread.php?tid=175543&star=at#

精华区都有,搜一下不可以了吗。
#5
gupiao1752007-10-16 13:18
晕,我要的是SQL存储过程方式分页的,非代码类的!
不过还是谢谢楼上的!辛苦了!
#6
天涯听雨2007-10-16 13:29
我晕,,你根据的他原理写成存储过程的不可以吗?

我就是根据存储过程写成代码式后,才发布在这里的。。


其实,这个代码式,会比你所见到的一般存储式快的多。。仔细看下它的分页原理

[此贴子已经被作者于2007-10-16 13:30:38编辑过]

#7
caor19872007-10-17 09:19

CREATE PROCEDURE page

@tblName varchar(255), -- 表名

@strGetFields varchar(1000) = '*', -- 需要返回的列

@fldName varchar(255)='', -- 排序的字段名

@PageSize int = 10, -- 页尺寸

@PageIndex int = 1, -- 页码

@doCount bit = 0, -- 返回记录总数, 非 0 值则返回

@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序

@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)

AS

declare @strSQL varchar(5000) -- 主语句

declare @strTmp varchar(110) -- 临时变量

declare @strOrder varchar(400) -- 排序类型

if @doCount != 0

begin

if @strWhere !=''

set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere

else

set @strSQL = "select count(*) as Total from [" + @tblName + "]"

end

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else

begin

if @OrderType != 0

begin

set @strTmp = "<(select min"

set @strOrder = " order by [" + @fldName +"] desc"

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

set @strTmp = ">(select max"

set @strOrder = " order by [" + @fldName +"] asc"

end

if @PageIndex = 1

begin

if @strWhere != ''

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder

else

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["

+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"+ @strOrder

if @strWhere != ''

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["

+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["

+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["

+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "

+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder

end

end

exec (@strSQL)
GO

我这个存储过程还可以,只是不知道怎么在ASP中调用。

1