欢迎光临
我们一直在努力

存储过程分页又一方法(使用table变量)(摘)-数据库专栏,SQL Server

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

要创建一个返回指定条记录结果的存储过程,首先必须指定返回结果集的条记录数,可以用临时表,也可以用table变量(sql server 2000),两个在性能上没有太大的差别,但是,table变量是存储在内存中的,如果你的服务器内存不多的话,可以考虑用临时表,临时表使用硬盘存储结果,临时表需要手工释放对象,而table变量在存储过程结束后自动释放。
    下面就是我们要创建的存储过程:

create proc getauthors
@author_last_name as varchar(100) = null,
@startrow as int = null,
@stoprow as int = null
as

—- 建立有标识符列的table变量
declare @t_table table
(
[rownum] [int] identity (1, 1) primary key not null ,
[author_last_name] [varchar] (40) ,
[author_first_name] [varchar] (20) ,
[phone] [char] (12) ,
[address] [varchar] (40) ,
[city] [varchar] (20) ,
[state] [char] (2) ,
[zip] [char] (5)
)

—- 在返回指定的@stoprow行数之后停止处理查询
set rowcount @stoprow

—- 插入到table变量中
insert @t_table
(
[author_last_name],[author_first_name],[phone],[address],[city],[state],[zip]
)
select [author_last_name],[author_first_name],[phone],[address],[city],[state],[zip]

from authors
where author_last_name like % + @author_last_name + %
order by author_last_name

—- 返回到正确的结果
select * from @t_table where rownum >= @startrow
order by rownum

go

    参数@startrow和@stoprow接收整数值,代表要返回的开始记录和结束记录,如果要在一个25条记录的页面中返回第4页,我们就可以设置@startrow为76,@stoprow为100。我们在table变量@t_table中定义了一个叫rownum的整数类型的列,并指定为标识符列,这个列在我们这里介绍的分页技术中是很重要的,当我们插入数据时,这个列自动增加,它将在插入数据时起排序作用。set rowcount语句对优化性能很关键,它告诉sql server进行限制要插入的数据,如果我们要76-100条记录之间的数据,那么就可以不必插入大于100条记录的数据。最后的sql语句从@t_table的table变量选择rownum大于或者等于@startrow的那些数据集,然后把它们返回到web服务器,由web服务器绑定到datagrid对象。值得注意的是:如果要得到76到100条记录的数据,我们必须往table变量中插入100条记录的数据,这意味着:如果浏览者请求的页数越来越大,页面性能也会有所下降的。例如:要显示第100页的数据(从第2451条记录到第2500条记录),我们必须先向table变量或者临时表填充2500条记录,因此,性能依赖于你计算机的硬件和你要返回的记录数,有测试表明,在sql server 2000中使用这样的存储过程平均在200-250毫秒内返回第100页,而返回第一页只需要4毫秒。即使返回第500页的数据(从第12451到12500条记录)也可以在650到750毫秒内完成。应该说这种情况是很少见到的。 但为了减轻数据库和网络传输的压力,设计合理的查询结果页数是很见效的。

摘自http://dotnet.aspx.cc/showdetail.aspx?id=108b1516-53ce-4357-b061-17295af9689f

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

相关推荐

  • 暂无文章