long-gengyun

SQL语句实现分页查询

2011-08-15 17:16  Eric.Hu  阅读(705)  评论(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)

分类:

技术点:

相关文章: