标签:
通用分页存储过程
声明一点:本人在做这个时候没有从查询速率的角度考虑,大神勿喷,只是从通用的角度考虑而已,本人会再接再厉做一个既通用查询速度有很好的代码的。
use gelunxiaowuyou go alter proc proc_Tablepage ( @table varchar(400), --表明 @pageIndex int,--当前索引页 @pageSize int,--每页显示的条数 @strSql varchar(400),--条件语句 @pageCount int output ,--输出总条数 @filedStr varchar(400), --查询字段 @orderId varchar(50) --排序字段 ) as begin --声明变量 declare @startPage int; declare @endPage int; declare @str varchar(400); declare @strCount nvarchar(400)
--从第几页开始 set @startPage=(@pageIndex-1)*@pageSize+1;
--显示多少条 set @endPage=@pageIndex*@pageSize;
--获取索引RowId if(@strSql!=‘‘ or @strSql!=null) begin set @str=N‘select row_number() over(order by ‘+@orderId+‘) ‘‘rowId‘‘, ‘ +@filedStr+ ‘ from ‘+@table+‘ where ‘+ @strSql +‘‘ end
--返回查询的条数 set @strCount=N‘select count(*) from (‘+ @str+ ‘) as temp ‘
--输出字符串 print @strCount;
--注意 这里的@sql必须是NCHAR,或Nvarchar(); exec sp_executesql @strCount,N‘@pageCount int output‘,@pageCount output;
--执行主语句 set @str=N‘select * from (‘+@str+‘) as temp where rowid between ‘+ltrim(str(@startPage))+‘ and ‘+ltrim(str(@endPage))+‘‘ print @str; exec(@str) end go
--测试
declare @pageCount int exec proc_Tablepage ‘student,ZhuanFa,HuiFang‘,1,3, ‘ student.Id=ZhuanFa.StudentId and ZhuanFa.Id=HuiFang.ZhuanFaId and HuiFang.IsLast=1 and ZhuanFa.JiaoXueDianId=4‘, @pageCount output,‘student.id‘‘sid‘‘,huifang.id‘‘id‘‘,StudentName,JiuDuXueXiao,GradeId,student.AddTime,CallTime,NextCallTime ‘,‘huifang.id‘
结果:
标签:
原文地址:http://www.cnblogs.com/lishuhua/p/4943006.html