当前位置: 网学 > 编程文档 > SQL SERVER > 正文

用存储过程实现分页功能

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式

 

if exists (select name from sysobjects where name =''sp_page'')
drop proc sp_page
go

create proc sp_page
@strTable varchar(50), --表名
@strColumn varchar(50), --按该列来进行分页
@intColType int, --@strColumn列的类型,0-数字类型,1-字符类型,2-日期时间类型
@intOrder bit, --排序,0-顺序,1-倒序
@strColumnlist varchar(800), --要查询出的字段列表,*表示全部字段
@intPageSize int, --每页记录数
@intPageNum int, --指定页
@strWhere varchar(800), --查询条件
@intPageCount int output --总页数
as
declare @sql nvarchar(4000) --用于构造SQL语句
declare @where1 varchar(800) --构造条件语句
declare @where2 varchar(800) --构造条件语句
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 @strColumn = '' '' + @strColumn + '' ''
set @strColumnlist = '' '' + @strColumnlist + '' ''
--构造SQL语句,计算总页数。计算公式为 总页数 = Ceiling ( 记录个数 / 页大小 )

set @sql=''select @intPageCount=ceiling((count(*)+0.0)/''
+ cast(@intPageSize as varchar)
+ '') from '' + @strTable + @where2

--执行SQL语句,计算总页数,并将其放入@intPageCount变量中

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 '' + @strTable + @where1 +
@strColumn + ''>(select max(''+@strColumn+'') ''+
'' from (select top ''+ cast(@intPageSize*(@intPageNum - 1) as varchar) +
@strColumn + '' from ''+ @strTable+@where2+''order by ''+@strColumn+'') t) order by ''+ @strColumn

else --构造降序的SQL
set @sql=''select top ''+ cast(@intPageSize as varchar) +
@strColumnlist+
'' from ''+ @strTable + @where1 +
@strColumn + ''<(select min(''+@strColumn+'') ''+
'' from (select top ''+ cast(@intPageSize*(@intPageNum - 1) as varchar) +
@strColumn + '' from ''+ @strTable+@where2+''order by ''+@strColumn+'' desc) t) order by ''+
@strColumn + '' desc''

if @intPageNum=1 --第一页
set @sql=''select top ''+cast(@intPageSize as varchar) + @strColumnlist + '' from ''+@strTable+
@where2+''order by '' + @strColumn + case @intOrder when 0 then '''' else '' desc''

end
--PRINT @sql
exec(@sql)
go

declare @intPageCount int

exec sp_page ''Alarm1'',''Id'',0,0,''*'',20,1,'''',@intPageCount output

drop proc sp_page


 

  • 下一篇资讯: sqlserver 删除重复记录
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号