您的位置:首页 > 数据库

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: