MSSQL存储过程分页,ASP存储过程分页
作者:Johnny 发布时间:2009-09-11 12:50:00
网络开发的在分页上要是遇到数(几十)万以上的数据还是用ADO那样的分页会速度很慢的。有了存储过程速度就快多了。
下面是本人用50万的数据进行的测试可以用的存储过程(网络上的好多都是不能用)和不用存储过程时间比较,前者0.2~0.7秒左右,后者要8~10秒左右。
显示如下:
在ASP中用ADO的要 所需时间:24.516秒
1、存储过程完整代码如下:
======开始========
/*=================
ASP+MSSQL存储过程分页
Johnny 2008-3-5
QQ:40623660
===================*/
if exists(select name from sysobjects where name='PagePROC' and type='p')
drop procedure PagePROC
go
create procedure dbo.PagePROC --要修改过程把Create改为alter
(
@TblName varchar(100), --200表名
@ID varchar(50), --200表的主键
@FldName varchar(200)='*', --200要显示的列名,如id,name,tel,....
@StrWhere varchar(500)='', --200排序条件,格式:不用写where
@OrderType int = 0, --11设置排序类型, 1降序,0升
@PageSize int, --3每页显示多少条记录
@CurrentPage int --3当前页,pageNo
)
AS
SET NOCOUNT ON --当 SET NOCOUNT 为 ON 时,存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
declare @strSQL varchar(2000) -- 主语句
declare @strTmp varchar(1000) -- 临时SQL变量
declare @strOrderBy varchar(50) -- 临时排序变量
declare @strOrder varchar(500) -- 排序类型
declare @recordCount varchar(1000) -- 总记录主语句,即RecordCount
--declare @PageCount int -- 总页数
/*--=======判断排条件,格式===========
if @StrWhere <> ''
set @StrWhere=' firstName like ''%'+@StrWhere+'%'' and lastName like ''%'+@StrWhere+'%'''
*/
--=======判断排序条件,格式===========
if @OrderType <> 0 --即降序
begin
set @strOrderBy = '<(select min'
set @strOrder = ' order by [' + @ID + '] desc'
end
else
begin
set @strOrderBy = '>(select max'
set @strOrder = ' order by [' + @ID +'] asc'
end
--============默认情况的SQL===========
Set @strTmp =' Select top ' + str(@PageSize) +' '+ @FldName +' from '+ @TblName
--=========判断当前是否第一页,并执行相应的代码,这样会加快执行速度===============
if @CurrentPage =1
Begin
if @StrWhere <> ''
Begin
Set @strSQL=@strTmp +' Where '+@StrWhere+' '+@strOrder
set @recordCount='select count('+@ID+') as RecordCount from '+ @TblName+' Where '+@StrWhere
End
else
Begin
Set @strSQL=@strTmp +' '+@strOrder
set @recordCount='select count('+@ID+') as RecordCount from '+ @TblName
End
End
else
Begin
if @StrWhere <> '' --有where条件查询时
Begin
Set @strSQL=@strTmp + ' where '+@ID+' '+ @strOrderBy+'('+@ID+') from (select top ' + str((@CurrentPage-1)*@PageSize)+' '+@ID+' from '+ @TblName+' Where '+@StrWhere+' '+@strOrder+' ) as tblTmp ) and '+ @StrWhere +' '+ @strOrder
set @recordCount='select count('+@ID+') as RecordCount from '+ @TblName+' Where '+@StrWhere
End
else -----------------------------------------无where条件时
Begin
Set @strSQL=@strTmp + ' where '+@ID+' '+ @strOrderBy+'('+@ID+') from (select top ' + str((@CurrentPage-1)*@PageSize)+' '+@ID+' from '+ @TblName+' '+@strOrder+' ) as tblTmp )'+' '+ @strOrder
set @recordCount='select count('+@ID+') as RecordCount from '+ @TblName
End
End
exec (@strSQL)
exec (@recordCount)
go
========完=======
2、ASP调用存储存储过程
ASP调用存储存要求是掌握ASP基础,才对下面的部分核心代码看得懂。
ASP调用存储存储过程一般用:adodb.command。如下:
’======开始==================
'这里连接数据库
Dim ConnStr,Conn
'''''''''''''''''''''''''''''''''SQL数据库 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'(local)或127.0.0.1或. '连接IP 本地用 (local)或127.0.0.1 或一个点.,外地用IP
'sa '数据库用户名
'123456 '用户密码
'johnnyData '数据库名
ConnStr = "Provider=SQLOLEDB;Server=127.0.0.1;Database=johnnyData;UID=sa;PWD=123456"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
On Error Resume Next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.open ConnStr
If Err Then
err.Clear
Set Conn = Nothing
Response.Write ("<div style='font-size:14px;color=#ff0000' align='center'>数据库连接出错,请检查数据库连接字串ConnStr </div>")
Response.End
End If
set recom = server.createobject("adodb.command")
recom.activeconnection = ConnStr
recom.commandtype = 4
recom.CommandTimeout = 0
recom.Prepared = true
recom.commandtext = "dbo.PagePROC"
'这里给要参数传值
TblName="testtable" '表名
id="ID" '主键名
FldName="id,firstName,lastName" '要显示的列名
StrWhere=“” '条件可以自己写,如:firstName=‘johnny’
OrderType=0 '0为升,1为降
PageSizeX = 10
PageNo = Clng(Request("PageNo"))'int最大值只有到32767.
If PageNo<=0 or PageNo="" Then PageNo=1
recom.Parameters.Append recom.CreateParameter("@TblName",202,1,100,TblName)
recom.Parameters.Append recom.CreateParameter("@ID",202,1,20,id)
recom.Parameters.Append recom.CreateParameter("@FldName",202,1,100,FldName)
recom.Parameters.Append recom.CreateParameter("@StrWhere",202,1,200,StrWhere)
recom.Parameters.Append recom.CreateParameter("@OrderType",3,1,1,OrderType)
recom.Parameters.Append recom.CreateParameter("@PageSize",3,1,6,PageSizeX)
recom.Parameters.Append recom.CreateParameter("@CurrentPage",3,1,6,PageNo)
set rs = recom.execute()
if rs.eof then
set rs=nothing : set recom=nothing : Conn.Close : set Conn=nothing
response.write "<script>alert('当前没有找到任何记录,请返回重新操作!');history.go(-1);</script>"
response.end
end if
'这里显示数据
while not rs.eof
response.write(""&rs("id")&" FirstName:"&rs("FirstName")&" | lastName: "&rs("lastName")&"<hr/>")
rs.movenext
wend
set rs = rs.NextRecordset '取得第2个记录集即总记录。
RecordCount=rs("RecordCount") '得到记录总数,
response.write("共有:"&RecordCount&" 条记录,根据这个请将你个人喜欢的分页代码放在这里")
'这里就是分页了,根据个人的需要自己喜欢的分页摸版。
'最后要关闭连接
set rs=nothing : set recom=nothing : Conn.Close : set Conn=nothing
'==============完==============
上面的调用是部分的核心代码,不是全部的代码。要直接使用请:
1)先将第一点的存储过程到你的MSSQL查询分析器中运行,随便插入几条数据以便分页显示。
2)再拷贝第2点的代码到你的页面上改数据库连接字符串ConnStr 。


猜你喜欢
- 导语hello everyone! I'm kimiko!Miss me???嘿!中秋结束了,开始正式营业给大家继续送福
- 今儿继续再看老师给推荐的深入浅出mysql数据库开发这本书,看到innodb数据库的外键关联问题时,遇到了一个问题,书上写的是可以对父表进行
- 测试用例(1) 测试用例(2)代码如下(python):# coding=utf-8from appium import webd
- 1、epochKeras官方文档中给出的解释是:“简单说,epochs指的就是训练过程接中数据将被“轮”多少次”(1)释义:训练过程中当一个
- 一、问题描述使用idea操作代码进行VCS很是方便,向github进行push和pull操作非常方便,但是,最近频繁提示需要重新输入用户名和
- 今天小编给大家详细的讲解一下Scrapy爬虫框架,希望对大家的学习有帮助。1、Scrapy爬虫框架Scrapy是一个使用Python编程语言
- 在HTML中,常见的URL有多种表示方式:相对URL: example.php demo
- 1.数据库事务的基本特性。原子性:事务中的所有操作要么全部提交成功,要么全部失败回滚。场景:UPDATE cs_user SET age =
- 一、前言在程序中,有很多高效率的字符串处理方式,如果开发者能够完全掌握这些高效的字符串处理,往往在开发者也能事半功倍。比如针对于字符串的处理
- 利用layui制作与众不同的感谢表单,表格layui极大的提高了前端开发效率,它极具个性的样式等等都非常吸引人,接下来我将为大家展示如何利用
- 实现原理PS的扩散效果可以产生类似毛玻璃质感的效果,使画面有些毛毛的感觉。其实现可通过操作像素三通道数值的方式实现,定义一个随机数器,将图像
- Python 2里面读取输入的函数是raw_input(), Python 3的是input(),读入一个值后回车读取输入就退出了,想要一次
- 工作中遇到大概20万的数据插入操作,程序编完后发现运行超时,修改PHP最大执行时间到600,还是超时,检查超时前插入的数据条数推算一下,大概
- 前言本文主要介绍的是Python如何使用zip函数同时遍历多个迭代器,文中的版本为Python3,zip函数是Python内置的函数。下面话
- 本文实例为大家分享了python实现移动木板小游戏的具体代码,供大家参考,具体内容如下一、游戏简介本游戏是通过python编写的小游戏,给初
- 本文实例为大家分享了python使用Plotly绘图工具绘制柱状图的具体代码,供大家参考,具体内容如下使用Plotly绘制基本的柱状图,需要
- Python中的数据可视化matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地
- hash//从井号 (#) 开始的 URL(锚)host//主机名和当前 URL 的端口号hostname//当前 URL 的主机名href
- 关于建立索引的几个准则:1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。2、索引越多,更新数据的速度越慢
- SQL Server执行动态SQL的话,应该如何实现呢?下面就为您介绍SQL Server执行动态SQL两种正确方式,希望可以让您对SQL