CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟





 
标题: [求助] sql分页存储过程排序问题
lovemilla
灵玉会员
Rank: 8Rank: 8



UID 307608
精华 1
积分 5280
帖子 506
威望 2446
ZD币 683 元
阅读权限 180
注册 2008-3-14
状态 离线
  楼主
发表于 2008-4-28 16:14  资料  个人空间  短消息  加为好友 
开发者在线

sql分页存储过程排序问题

这个存储过程还是比较好用的。可是里面有些问题。看看有没有高手帮帮忙解决一下,问题一就是这个存储过程的排续只能以id或别的字段递增方式进行,,如果不是递增的或有相同值的排序,就会出错的。看看有没有人能修改一下,,谢谢了~~~~~~   
   
   
   
   
   
   
   
   
  CREATE       PROCEDURE       chapage         
              @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         
      版                   本:1.10         
      最后修改:2004-11-29         
      */         
      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'         
      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




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
 



当前时区 GMT+8, 现在时间是 2009-1-10 11:43

  Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
Processed in 0.065940 second(s), 3/3 queries

清除 Cookies - 联系我们 - ZDNetChina中文社区 - 无图版