SQL 分页存储过程
2016-06-02 13:13
453 查看
--Author: Longxi Zhu --Date: 2016-06-02 --Description: Get Paged list Create procedure usp_Cosmos_GetPagedJobs @tableName varchar(50), @fields varchar(max), @strWhere varchar(max),--条件 @orderField varchar(50), @pageIndex int=1,--页索引 @pageSize int,--每页显示条数 @pageCount int output,--总页数 @totalCount int output--总条数 AS begin set nocount on; declare @sql nvarchar(max); if(isnull(@strWhere,'')='') begin set @sql='select @totalCount=count(*)from ' +@tableName; end else begin set @sql='select @totalCount=count(*) from '+@tableName+' where '+@strWhere end exec sp_executesql @sql,N'@totalCount int output',@totalCount output;--计算总条数 --计算总页数 select @pageCount=CEILING((@totalCount+0.0)/@pageSize); if(isnull(@strWhere,'')='') begin set @sql='select * from (select row_number() over(order by '+@orderField+') as rowId,'+@fields+' from '+@tableName; end else begin set @sql='select * from (select row_number() over(order by '+@orderField+') as rowId,'+@fields+' from '+@tableName+' where '+@strWhere; end --处理页超出范围情况 if(@pageIndex<=0) begin set @pageIndex=1; end if(@pageIndex>@pageCount) begin set @pageIndex=@pageCount; end --处理开始点和结束点 declare @beginIndex int,@endIndex int set @beginIndex=(@pageIndex-1)*@pageSize+1 set @endIndex=@pageIndex*@pageSize --继续组织sql语句 set @sql=@sql+') as a'+' where rowId between '+Convert(varchar,@beginIndex) +' and '+Convert(varchar,@endIndex); exec (@sql); set nocount off; end declare @pageCount1 int, @totalCount1 int exec usp_Cosmos_GetPagedJobs 'jobs','*','alias like ''%v-lozhu%''','id',3,3,@pageCount1 output,@totalCount1 output
相关文章推荐
- Redis源码分析:内存管理
- MySQL 选择数据库
- Redis源码分析:服务器编程模型
- 初识Redis
- Navicat for MySQL&nbsp…
- 【MySQL】[Err] [Imp] 2…
- Redis集群方案及实现
- mysql latin1 utf8 转换
- 求某字段的总和mysql语句
- postgresql in 优化
- 从mysql导出到excel 格式为.xls
- 从mysql导出到excel 格式为.csv
- 重复记录只显示一条的问题 SQL重复…
- Oracle中Blob和Clob类型的区别与操作
- mysqll 字符集合分析
- 数据库操作:添加、插入、更新语句
- 读出三条记录的SQL语句
- redis集群(主从配置)
- 解决数据库不能更新或数据库或对象…
- sql的安装问题_以前的某个程序安装…