CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

我想问一下在SQL中存储过程分页的思路是什么啊?

楼主99dz31(初心者之Asp.net)2005-06-03 15:51:30 在 MS-SQL Server / 基础类 提问

就是究竟怎样实现的阿?  
   
  例如:sql='SELECT   TOP   '+CAST(@pagesize   AS   varchar)+'   '+@collist+  
                        '   FROM   '+@tb+@where1+@col+'>(SELECT   MAX('+@col+')   '+  
                        '   FROM   (SELECT   TOP   '+CAST(@pagesize*(@page-1)   AS   varchar)+'   '+  
                        @col+'   FROM   '+@tb+@where2+'ORDER   BY   '+@col+')   t)   ORDER   BY   '+@col  
   
   
  这是什么意思啊?  
  本人刚学SQL,希望能讲讲实现的思路哦!谢谢! 问题点数:0、回复次数:6Top

1 楼fengfangfang()回复于 2005-06-03 15:55:39 得分 0

http://community.csdn.net/Expert/topic/4033/4033897.xml?temp=.2484705Top

2 楼duanduan1122(俺村俺帅!!!)回复于 2005-06-03 16:51:18 得分 0

转载:  
  CREATE   PROCEDURE   sp_page  
      @tb                   varchar(50),   --表名  
      @col                 varchar(50),   --按该列来进行分页  
      @coltype         int,                   --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型  
      @orderby         bit,                   --排序,0-顺序,1-倒序  
      @collist         varchar(800),--要查询出的字段列表,*表示全部字段  
      @pagesize       int,                   --每页记录数  
      @page               int,                   --指定页  
      @condition     varchar(800),--查询条件  
      @pages             int   OUTPUT       --总页数  
  AS  
  /*作者:pbsql*/  
  DECLARE   @sql   nvarchar(4000),@where1   varchar(800),@where2   varchar(800)  
  IF   @condition   is   null   or   rtrim(@condition)=''  
  BEGIN--没有查询条件  
      SET   @where1='   WHERE   '  
      SET   @where2='     '  
  END  
  ELSE  
  BEGIN--有查询条件  
      SET   @where1='   WHERE   ('+@condition+')   AND   '--本来有条件再加上此条件  
      SET   @where2='   WHERE   ('+@condition+')   '--原本没有条件而加上此条件  
  END  
  SET   @sql='SELECT   @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize   AS   varchar)+  
                    ')   FROM   '+@tb+@where2  
  EXEC   sp_executesql   @sql,N'@pages   int   OUTPUT',@pages   OUTPUT--计算总页数  
  IF   @orderby=0  
      SET   @sql='SELECT   TOP   '+CAST(@pagesize   AS   varchar)+'   '+@collist+  
                        '   FROM   '+@tb+@where1+@col+'>(SELECT   MAX('+@col+')   '+  
                        '   FROM   (SELECT   TOP   '+CAST(@pagesize*(@page-1)   AS   varchar)+'   '+  
                        @col+'   FROM   '+@tb+@where2+'ORDER   BY   '+@col+')   t)   ORDER   BY   '+@col  
  ELSE  
      SET   @sql='SELECT   TOP   '+CAST(@pagesize   AS   varchar)+'   '+@collist+  
                        '   FROM   '+@tb+@where1+@col+'<(SELECT   MIN('+@col+')   '+  
                        '   FROM   (SELECT   TOP   '+CAST(@pagesize*(@page-1)   AS   varchar)+'   '+  
                        @col+'   FROM   '+@tb+@where2+'ORDER   BY   '+@col+'   DESC)   t)   ORDER   BY   '+  
                        @col+'   DESC'  
  /*我试过在这里修改   set   @collist=@collist+'@pages'   想把总页数也放在第1个结果集里*/  
  IF   @page=1--第一页  
      SET   @sql='SELECT   TOP   '+CAST(@pagesize   AS   varchar)+'   '+@collist+'   FROM   '+@tb+  
          @where2+'ORDER   BY   '+@col+CASE   @orderby   WHEN   0   THEN   ''   ELSE   '   DESC'   END  
  EXEC(@sql)  
  GO  
   
  这个分页有点瑕疵,就是返回的总页数只能显示而不能得到。  
  declare   @o   int   exec   sp_page   'test','code',0,0,'*',15,23,'',@o   output   select   @o  
  执行这句SQL会返回2个结果集,但是在JAVA里用jdbc我只能得到第1个结果集,也就是只能得到表"test"的第23页数据,而总共有多少页得不到。有谁能修改下这段代码,把总页数放在第1个结果集里。  
  问题解决了将奉上3年来苦攒的7000多分。  
  Top

3 楼duanduan1122(俺村俺帅!!!)回复于 2005-06-03 16:52:55 得分 0

看看1楼的网址!!!Top

4 楼99dz31(初心者之Asp.net)回复于 2005-06-03 17:04:22 得分 0

CAST(@pagesize   AS   varchar)是什么意思啊?  
   
  就是不明白为什么这样就实现哦~!  
  SET   @sql='SELECT   TOP   '+CAST(@pagesize   AS   varchar)+'   '+@collist+  
                        '   FROM   '+@tb+@where1+@col+'>(SELECT   MAX('+@col+')   '+  
                        '   FROM   (SELECT   TOP   '+CAST(@pagesize*(@page-1)   AS   varchar)+'   '+  
                        @col+'   FROM   '+@tb+@where2+'ORDER   BY   '+@col+')   t)   ORDER   BY   '+@col  
   
   
  这句SQL什么意思啊?Top

5 楼whatsouta(某疯子)回复于 2005-06-03 18:20:25 得分 0

CAST(@pagesize   AS   varchar)是什么意思啊?  
  把   @pagesize   这个变量/参数   的值转换成varchar类型Top

6 楼99dz31(初心者之Asp.net)回复于 2005-06-04 09:00:55 得分 0

为什么要这样啊?Top

相关问题

  • help:分页存储过程。。。。。。。。。
  • 求分页存储过程
  • 分页存储过程
  • 有没有分页的存储过程,我输入一条SQL语句,能把结果集分页显示
  • 哪位帮我把下面陕北吴旗娃的SQL SERVER分页控件的存储过程改成ORACLE数据库能用的存储过程,谢谢!!!
  • 高分找分页的存储过程?
  • 老问题,存储过程分页
  • 分页存储过程~求解~
  • 分页存储过程请教
  • 高分求ORCALE 分页存储过程

关键词

  • 查询
  • top
  • sql
  • col
  • pagesize
  • varchar
  • 条件
  • 类型
  • tb
  • condition

得分解答快速导航

  • 帖主:99dz31

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo