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毫秒内完成。应该说这种情况是很少见到的。 但为了减轻数据库和网络传输的压力,设计合理的查询结果页数是很见效的。

  • 相关阅读:
    关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录
    js 贷款计算器
    js 实现阶乘
    js 两点间距离函数
    composer Your requirements could not be resolved to an installable set of packages
    vue 项目优化记录 持续更新...
    vue 项目打包
    vue 真机调试页面出现空白
    vue 真机调试
    谈谈-Android状态栏的编辑
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2535032.html
Copyright © 2011-2022 走看看