通用分页存款和储蓄进程

发布时间:2019-04-14  栏目:SQL  评论:0 Comments

select @sql = ‘Select Top ‘ + Convert(varchar(10),@pageSize) + ‘ ‘ +
@columns + ‘ From ‘ + @tableName
select @sql2 = @sql + @where
select @sql =  @sql + ‘ Where ‘ + ‘(‘ + @indexCol + ‘ Not In (Select Top
‘ + Convert(varchar(10),  ((@pageIndex-1)*@pageSize)) + ‘ ‘ + @indexCol

— 获取数据总行数 —

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

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

GO

if @where <> ”
begin
    select @where2 = ‘ And ‘ + @where
    select @where = ‘ Where ‘ + @where
end
else
    select @where2 = ”

 

GO

— 得到钦命页的数目–

declare @strsql   varchar(5000)              — 主语句
declare @strtmp   varchar(四千)             — 权且变量
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页

–排序方向
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’
 end
else
 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 output
as
begin


  • ‘ From ‘ + @tableName + @where +  ‘ Order by ‘+ @orderCol +’))’
    select @sql = @sql + @where2
    select @sql = @sql + ‘ Order by ‘ + @orderCol
    –获得数据集
    exec (@sql)
    PRINT @sql
    select @sql2 = Replace(@sql2,’Top ‘ + Convert(varchar(10), @pageSize) +
    ‘ ‘ + @columns, ‘count(1)’)
    –获得总数据条数
    exec(@sql2)

 @str_sql           varchar(1000) = ‘*’,     — 执行的SQL 不含Order by
内容  
 @str_order田野同志    varchar(25五)=””,       — 排序的字段名 
 @page_size         int = 10,                     — 页大小 
 @page_index        int = 0,                      — 页码
 @order_type        int,                           — 设置排序类型, 非
-1 值则降序 
 @total_count       int   output                 — 重回记录总数, 非 0
值则赶回 
as

if exists(select * from sys.objects where name=’存款和储蓄进程名称’)
drop proc 存款和储蓄进度名称
go
CREATE proc 存储进程名称
@tableName varchar(8000),          –表名、视图名
@indexCol varchar(50) = ‘a.id’,     
–标识列名(如:比如主键、标识,推荐使用索引列)
@pageSize int = 拾,                –页面大小
@pageIndex int = 0,                –当前页
@orderCol varchar(100) = ‘a.id desc’,–排序 (如:id)
@where varchar(max) = ”,         –条件
@columns varchar(500) = ‘*’        –要出示的列
as
declare @sql varchar(max)
declare @sql2 varchar(max)
declare @where2 varchar(max)

1.
分页存储进程(源码)

       
这是自个儿项目中选取的3个分页存款和储蓄进程,具有很强的通用性。合营前台ASP.NET使用50万条数据基本感不到延迟。数据库为SQLServer3000。

CREATE   procedure pagination


正文版权归笔者meil转发请申明出处 

2006年6月14日  作者:meil 
博客:meil.livebaby.cn

留下评论

网站地图xml地图