1个通用的分页存款和储蓄进度(原创)

发布时间:2019-04-16  栏目:MySQL  评论:0 Comments

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)

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

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

本文版权归作者meil转发请申明出处 

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

       
那是自家项目中利用的一个分页存款和储蓄进程,具备很强的通用性。同盟前台ASP.NET使用50万条数据基本感不到延迟。数据库为SQLServer两千。

  • ‘ 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)

 

GO

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

CREATE   procedure pagination

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


— 获得内定页的多寡–

declare @strsql   varchar(5000)              — 主语句
declare @strtmp   varchar(6000)             — 方今变量
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


— 获取数据总行数 —

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

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

GO

留下评论

网站地图xml地图