存储过程是一个运行于sql数据库之中最核心的事务,它通过长驻内存的形式,进行读取\处理\写入最为频繁处理的数据.
asp虽然在微软的aspx的侵袭下,仍旧是中小企业继续在用的一种网页语言,但是当要读取海量数据的时候,如果仍旧使用普通的sql进行读取运行与写入,将导致系统资源的严重浪费,所以我们在asp中使用存储过程,以提高数据的存取速度,同时通过sql核心的获取数据的方法,可以有效的减少垃圾数据(不被立即使用,而且也不备较短的时间里被使用的数据)操作.
在asp中使用存储过程也是相当的容易,例如以下一个通过sql存储过程进行分页的方法:
存储过程:
create procedure p_splitpage
@sql nvarchar(4000), –要执行的sql语句
@page int=1, –要显示的页码
@pagesize int, –每页的大小
@pagecount int=0 out, –总页数
@recordcount int=0 out –总记录数
as
set nocount on
declare @p1 int
exec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output
set @recordcount = @pagecount
select @pagecount=ceiling(1.0*@pagecount/@pagesize)
,@page=(@page-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@page,@pagesize
exec sp_cursorclose @p1
go
asp页面的内容
sql = “select id, c_s_name from tabnews where deleted<>1 order by id desc”
page = cint(page_get)
if page_post<>””then
page = cint(page_post)
end if
if not page > 0 then
page = 1
end if
pagesize=20’每页的条数
set cmd = server.createobject(“adodb.command”)
cmd.activeconnection = conn
cmd.commandtype = 4
cmd.commandtext = “p_splitpage”
cmd.parameters.append cmd.createparameter(“@sql”,8,1, 4000, sql)
cmd.parameters.append cmd.createparameter(“@page”,4,1, 4, page)
cmd.parameters.append cmd.createparameter(“@pagesize”,4,1, 4, pagesize)
cmd.parameters.append cmd.createparameter(“@pagecount”,4,2, 4, pagecount)
cmd.parameters.append cmd.createparameter(“@recordcount”,4,2, 4, recordcount)
set rs = cmd.execute
set rs = rs.nextrecordset
pagecount = cmd.parameters(“@pagecount”).value
recordcount = cmd.parameters(“@recordcount”).value
if pagecount = 0 then pagecount = 1
if page>pagecount then
response.redirect(“?page=”&pagecount)
end if
set rs = cmd.execute
我们如此就可以实现对数据的读取并可以进行有效的分页,但是我们往往会发现一个问题,如果我们构造的sql语句如果使用的是select * from tab …的话,就经常出现无法读取数据的错误,或者是读取出来,但是有的数据无法显示的错误,经过仔细的检查发现,如果是排列在sql语句的前列的数据可以被读取,而如果不按照sql读取出来的字段进行顺序读取,就会出现数据丢失的情况,所以唯一的途径就是进行顺序读取.如:
对于select id, newstitle, newscontent from tabnews where …的sql语句,就应当将所有的数据读取到变量上来,并且要求是按照sql语句的顺序进行读取,然后这些数据就可以自由的使用了.
id = rs(“id”)
newstitle = rs(“newstitle”)
…
分析出现这个的原因是:sql数据库在构造虚拟表的时候就是以一种先进先出的原则,把所有的数据排列在一个内存段之中,通过顺序的读取,将数据逐一的读取,而如果跳过某个具体的字段获取下一个字段的信息,系统就会将原来的那个字段的信息丢失,以释放内存,这是出于系统构造的简单性和系统的内存最低化的要求,所以这样也保证了有限的内存资源得到最充分的发挥,这也是为什么存储过程比普通的sql要快的原因.
使用SQL存储过程要特别注意的问题-注意顺序读取-数据库专栏,SQL Server
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用SQL存储过程要特别注意的问题-注意顺序读取-数据库专栏,SQL Server
相关推荐
-      DataGrid中的按钮反选事件与NamingContainer(命名容器)-downmoon-ASP教程,数据库相关
-      根据数据表中数据,生成Powerpoint幻灯片-ASP教程,数据库相关
-      使用用VB处理MYSQL数据库中二进制数据问题-.NET教程,VB.Net语言
-      关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关
-      ActiveMQ4.1+Spring2.0的POJO JMS方案(上)-.NET教程,数据库应用
-      ASP.NET 2.0中直接将Access数据库导入到Excel文件中-.NET教程,Asp.Net开发
-      DataGrid的多行提交-.NET教程,数据库应用
-      一个简单的asp数据库操作类-ASP教程,数据库相关