欢迎光临
我们一直在努力

使用SQL存储过程要特别注意的问题-注意顺序读取-数据库专栏,SQL Server

建站超值云服务器,限时71元/月

    存储过程是一个运行于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要快的原因.

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用SQL存储过程要特别注意的问题-注意顺序读取-数据库专栏,SQL Server
分享到: 更多 (0)