一个通用的分页存储过程

    技术2022-05-11  44

    配合前台ASP.NET使用50万条数据基本感不到延迟。数据库为SQLServer2000。

     

    1.分页存储过程

    CREATE   procedure pagination

     @str_sql           varchar(1000) = '*',     -- 执行的SQL 不含Order by 内容   @str_orderfield    varchar(255)='''',       -- 排序的字段名  @page_size         int = 10,                     -- 页大小  @page_index        int = 0,                      -- 页码 @order_type        int,                           -- 设置排序类型, 非 -1 值则降序  @total_count       int   output                 -- 返回记录总数, 非 0 值则返回 as

    ----------------------- 获取指定页的数据-----------------------

    declare @strsql   varchar(5000)              -- 主语句declare @strtmp   varchar(5000)             -- 临时变量declare @strorder varchar(400)              -- 排序字串declare @cruRow   int                            -- 当前行号 

    --执行总数统计exec getRowCount @str_sql,@total_count output

    set @strtmp =  ' select * from ' +         '      (select top ' + convert(varchar(10),@page_size) + ' * from ' +        '         (select top ' + convert(varchar(10),(@page_index + 1) * @page_size)  +' * from '+        -- N+1页        '            ('+ @str_sql +') Src '

    --排序方向if @order_type !=0 begin set @strsql= @strtmp +       '          order by @str_orderfield asc) a ' +       '       order by @str_orderfield desc)b' +              ' order by @str_orderfield asc' endelse begin set @strsql= @strtmp +       '          order by @str_orderfield desc) a ' +       '       order by  @str_orderfieldasc)b' +              ' order by  @str_orderfield desc' end

    exec (@strsql)GO

    ----------------------------------------------------------------------------

     

    2.分页存储过程执行中用到的行数统计

    create  procedure getRowCount       @sql    nvarchar(2000),       @count  int outputasbegin

    ---------------------- 获取数据总行数 ----------------------

      declare @tmpsql nvarchar(2000)  set @tmpsql='select @count=count(*)  from ('+ @sql +') a'

      execute sp_executesql @tmpsql,N'@count int output',@count output  end

    GO

     

    最新回复(0)