SQL语句实现分页查询
2011-08-15 17:16 Eric.Hu 阅读(801) 评论(0) 编辑 收藏 举报declare @strTableName varchar(50) --表名
declare @strColumnPage varchar(50) --按照该列进行分页
declare @intColumnType int --@strColumn列的类型 0为数字 1为字符 2 掌?br> declare @intOrder int --排序 0为顺序 1为倒序
declare @strColumnList varchar(800) --要查询出的字段列表,*表示全部字段
declare @intPageSize int --每页记录数
declare @intPageNum int --页号
declare @strWhere varchar(800) --查询条件
declare @intPageCount int --总页数
set @strTableName = 'T01' --表名
set @strColumnPage = 'ID' --按照该列进行分页
set @intColumnType = 0 --@strColumn列的类型 0为数字 1为字符 2 为日期
set @intOrder = 1 --排序 0为顺序 1为倒序
set @strColumnList = '*' --要查询出的字段列表,*表示全部字段
set @intPageSize = 10 --每页记录数
set @intPageNum = 2 --页号
set @strWhere = '' --查询条件
set @intPageCount = 0 --总页数
--功能代码
declare @sql nvarchar(4000) --用于构造SQL语句
declare @where1 varchar(800) --条件语句1
declare @where2 varchar(800) --条件语句2
if @strWhere is null or rtrim(@strWhere)=''
--为了避免SQL关键字、表名等连在一起,注意空格的添加
begin --没有查询条件
set @where1=' where '
set @where2=' '
end
else --有查询条件
begin
set @where1=' where ('+@strWhere+') and '
set @where2=' where ('+@strWhere+') '
end
set @strColumnPage=' '+@strColumnPage+' '
set @intColumnType=' '+@intColumnType+' '
--构造SQL语句,计算总页数。计算公式为 总页数=Ceiling(记录个数/页大小)
set @sql='select @intPageCount=Ceiling((count(*)+0.0)/'+cast(@intPageSize as varchar)+') from '+@strTableName + @where2
--执行SQL语句,计算总页数,并将其放入@intPageCount变量中
--print @sql
exec sp_executesql @sql,N'@intPageCount int output',@intPageCount output
--将总页面数放到查询返回记录集的第一个字段钱,次语句可以省略
set @strColumnList=' '+cast(@intPageCount as varchar(30))+' as PageCount, '+@strColumnList
if @intOrder=0 --构造升序的SQL
set @sql='select top '+cast(@intPageSize as varchar)+@strColumnList+' from '+@strTableName+@where1+@strColumnPage+' >(select max('+@strColumnPage+') from(select top '+cast(@intPageSize*(@intPageNum-1) as varchar)+' '+@strColumnPage+' from '+@strTableName+@where2+' order by '+@strColumnPage+') t) order by'+@strColumnPage
else
set @sql='select top '+cast(@intPageSize as varchar)+@strColumnList+' from '+@strTableName+@where1+@strColumnPage+' <(select min('+@strColumnPage+') from(select top '+cast(@intPageSize*(@intPageNum-1) as varchar)+' '+@strColumnPage+' from '+@strTableName+@where2+' order by '+@strColumnPage+' desc) t) order by'+@strColumnPage+' desc '
if @intPageNum=1 --第一页
set @sql='select top '+cast(@intPageSize as varchar)+@strColumnList+' from '+@strTableName+@where2+' order by '+@strColumnPage+case @intOrder when 0 then '' else ' desc'
end
--print @sql
exec(@sql)