zoukankan      html  css  js  c++  java
  • 存储过程分页又一方法(使用table变量)

    要创建一个返回指定条记录结果的存储过程,首先必须指定返回结果集的条记录数,可以用临时表,也可以用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毫秒内完成。应该说这种情况是很少见到的。 但为了减轻数据库和网络传输的压力,设计合理的查询结果页数是很见效的。

  • 相关阅读:
    Mybatis-配置解析
    Mybatis-CRUD
    ExtJS3.4升级ExtJS4.2的问题汇总(转)
    Extjs视频
    Freemarker语法
    JSP 语法/标签
    android 入门-ID
    Win10 VS2015 社区版切换到VS2013社区版 进行维护之前的项目
    Win10 AppBar
    Win10 保存Element到相册
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2535032.html
Copyright © 2011-2022 走看看