CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

求一个分页的存储过程:用GetRecordFromPage按ID排序到是可以。到是我想以时间字段可就麻烦了。。想求一个按任意字段排序的分页存储过程

楼主520luoxp(一派河山千古秀.NET)2005-09-27 18:13:02 在 .NET技术 / ASP.NET 提问

用GetRecordFromPage按ID排序到是可以。到是我想以时间字段可就麻烦了。  
  这个是GetRecordFromPage  
  CREATE   PROCEDURE   GetRecordFromPage  
          @tblName             varchar(255),               --   表名  
          @fldName             varchar(255),               --   字段名  
        @allfldName             varchar(255),               --   字段名  
          @PageSize           int   =   10,                       --   页尺寸  
          @PageIndex         int   =   1,                         --   页码  
          @IsCount             bit   =   0,                         --   返回记录总数,   非   0   值则返回  
          @OrderType         bit   =   0,                         --   设置排序类型,   非   0   值则降序  
          @strWhere           varchar(1000)   =   ''     --   查询条件   (注意:   不要加   where)  
  AS  
   
  declare     @strSQL       varchar(1000)           --   主语句  
  declare   @strTmp       varchar(300)           --   临时变量  
  declare   @strOrder   varchar(400)               --   排序类型  
   
  if   @OrderType   !=   0  
  begin  
          set   @strTmp   =   "<(select   min"  
          set   @strOrder   =   "   order   by   ["   +   @fldName   +"]   desc"  
  end  
  else  
  begin  
          set   @strTmp   =   ">(select   max"  
          set   @strOrder   =   "   order   by   ["   +   @fldName   +"]   asc"  
  end  
   
  set   @strSQL   =   "select   top   "   +   str(@PageSize)   +@allfldName+"   from   ["  
          +   @tblName   +   "]   where   ["   +   @fldName   +   "]"   +   @strTmp   +   "(["  
          +   @fldName   +   "])   from   (select   top   "   +   str((@PageIndex-1)*@PageSize)   +   "   ["  
          +   @fldName   +   "]   from   ["   +   @tblName   +   "]"   +   @strOrder   +   ")   as   tblTmp)"  
          +   @strOrder  
   
  if   @strWhere   !=   ''  
          set   @strSQL   =   "select   top   "   +   str(@PageSize)   +@allfldName+"   from   ["  
                  +   @tblName   +   "]   where   ["   +   @fldName   +   "]"   +   @strTmp   +   "(["  
                  +   @fldName   +   "])   from   (select   top   "   +   str((@PageIndex-1)*@PageSize)   +   "   ["  
                  +   @fldName   +   "]   from   ["   +   @tblName   +   "]   where   ("   +   @strWhere   +   ")   "  
                  +   @strOrder   +   ")   as   tblTmp)   and   ("   +   @strWhere   +   ")   "   +   @strOrder  
   
  if   @PageIndex   =   1  
  begin  
          set   @strTmp   =   ""  
          if   @strWhere   !=   ''  
                  set   @strTmp   =   "   where   ("   +   @strWhere   +   ")"  
   
          set   @strSQL   =   "select   top   "   +   str(@PageSize)   +@allfldName+"   from   ["  
                  +   @tblName   +   "]"   +   @strTmp   +   "   "   +   @strOrder  
  end  
  exec   (@strSQL)  
  GO  
   
   
  找了个GetPagingData  
  create   PROCEDURE   dbo.GetPagingData    
          (    
                  @tablename   varchar(100),--表名或视图表    
                  @fieldlist   varchar(4000)='*',--欲选择字段列表    
                  @orderfield   varchar(100),--排序字段    
                  @keyfield   varchar(100),--主键    
                  @pageindex   int,--页号,从0开始    
                  @pagesize   int=20,--页尺寸    
                  @strwhere   varchar(4000),--条件    
                  @ordertype   bit=1--排序,1,降序,0,升序    
          )    
  AS    
  /**//*    
  名称:GetPagingRecord    
  作用:按任意字段进行排序分页    
  作者:菩提树(MARK   MA)    
  时间:2004-12-14    
  声明:此代码你可以无偿使用及转载,但在转载时,请勿移称本文字声明    
  */    
          SET   NOCOUNT   ON    
          declare   @sqlstr   varchar(6000)    
          --处理SQL中危险字符,并且将条件处理成易嵌入的形式            
          set   @sqlstr='declare   @Rcount   int;'    
          set   @sqlstr=@sqlstr+'set   @rcount=(select   count('+@keyfield+')   from   '+@tablename+'   where   '+@strWhere+');'            
          set   @strwhere=replace(@strwhere,'''','''''')    
          set   @strwhere=replace(@strwhere,'--','')    
          set   @strwhere=replace(@strwhere,';','')    
          set   @sqlstr=@sqlstr+'declare   @Rnum   int;'    
          set   @sqlstr=@sqlstr+'set   @rnum=@rcount-'+cast(@pagesize   as   varchar)+'*'+cast(@pageindex   as   varchar)+';'    
          set   @sqlstr=@sqlstr+'declare   @sqlstr   varchar(6000);'    
          if   @ordertype=1    
          begin    
          set   @sqlstr=@sqlstr+'set   @sqlstr=''select   top   '+cast(@Pagesize   as   varchar)+'   '+@fieldlist+'   from   (select   top   100      
     
  percent   *   from     (select   top     ''+cast(@rnum   as   varchar)+''   *   from   '+@tablename+'   where   '+@strwhere+'      
     
  order   by   '+@orderfield+'   asc)   as   b   order   by   paymoney   desc)   as   a   order   by   '+@orderfield+'   desc   '';'    
          end    
          else    
          begin    
          set   @sqlstr=@sqlstr+'set   @sqlstr=''select   top   '+cast(@Pagesize   as   varchar)+'   '+@fieldlist+'   from   (select   top   100      
     
  percent   *   from     (select   top     ''+cast(@rnum   as   varchar)+''   *   from   '+@tablename+'   where   '+@strwhere+'      
     
  order   by   '+@orderfield+'   desc)   as   b   order   by   paymoney   asc)   as   a   order   by   '+@orderfield+'   asc   '';'    
          end    
          set   @sqlstr=@sqlstr+'if   @Rcount>0   begin   execute(@sqlstr)   end'            
          --print   @sqlstr    
          execute(@sqlstr)  
  GO  
  可是远行:  
  exec   GetPagingData  
                  @tablename   ='news',  
                  @fieldlist   ='*',--欲选择字段列表    
                  @orderfield     ='utter_date',--排序字段    
                  @keyfield     ='id',--主键    
                  @pageindex   =1,--页号,从0开始    
                  @pagesize   =20,--页尺寸    
                  @strwhere     ='',--条件    
                  @ordertype   =1--排序,1,降序,0,升序    
   
  出错提示:  
  服务器:   消息   170,级别   15,状态   1,行   1  
  第   1   行:   ')'   附近有语法错误。  
  问题点数:50、回复次数:10Top

1 楼sxBamboo(竹子)回复于 2005-09-28 06:22:55 得分 0

看不懂!这个是ASP.NET的语法吗?   —_—!!Top

2 楼luby(轻疯[在岁月无声的消逝里,轻轻的...我疯了。])回复于 2005-09-28 08:10:21 得分 30

这个可以对id和日期同时排序   比如id降序,日期升序等  
  CREATE             PROCEDURE   mypage  
      @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)--查询条件    
       
  AS  
   
  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  
   
  IF   @page=1--第一页  
  begin  
      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)  
      return    
  end  
   
   
  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'  
  EXEC(@sql)  
      returnTop

3 楼520luoxp(一派河山千古秀.NET)回复于 2005-09-28 08:22:19 得分 0

顶Top

4 楼520luoxp(一派河山千古秀.NET)回复于 2005-09-28 10:41:00 得分 0

luby(笑天犬)兄台的存储过程果然是好。  
  我想实现除了按时间的倒序排序外。还按照ID的倒序排序。  
  也就是order   by   utter_date   desc,id   descTop

5 楼520luoxp(一派河山千古秀.NET)回复于 2005-09-28 14:30:09 得分 0

高分求可实现按任意两个字段的排序的存储过程  
  我想实现除了按时间的倒序排序外。还按照ID的倒序排序。  
  也就是order   by   utter_date   desc,id   desc  
  Top

6 楼iuhxq(小灰)回复于 2005-09-28 14:40:16 得分 0

http://blog.csdn.net/iuhxq/archive/2005/06/30/408758.aspx  
   
  我写的存储过程Top

7 楼520luoxp(一派河山千古秀.NET)回复于 2005-10-08 08:45:30 得分 0

upTop

8 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2005-10-08 08:53:49 得分 20

http://community.csdn.net/Expert/TopicView3.asp?id=4189627  
  翻动100万级的数据   ——   只需几十毫秒   之解释篇:本来不想再说了,但是有一个误会必须得说一下。  
   
  http://community.csdn.net/Expert/TopicView3.asp?id=4182510  
  翻动100万级的数据   ——   只需几十毫秒   之揭秘篇:有详细的说明,不要错过。  
   
   
  我的两个帖子。  
   
   
  Top

9 楼520luoxp(一派河山千古秀.NET)回复于 2005-10-08 09:20:50 得分 0

jyk   兄我现在想找的是一个:  
  能按两个字段来排序分页的存储过程。  
  我想实现除了按时间的倒序排序外。还按照ID的倒序排序。  
  也就是order   by   utter_date   desc,id   desc  
  Top

10 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2005-10-08 10:07:21 得分 0

如果你仔细看的话,你会找到答案的。  
  http://community.csdn.net/Expert/TopicView3.asp?id=4189627  
  这里有的Top

相关问题

  • 字段很多,水晶报表如何分页
  • 如何给字段改名,以及如何在任意位置添加字段
  • word中的怎么实现任意分页?
  • 字段很多,如何实现分页显示??(查了好久,急盼答案)
  • 怎么实现任意表中文本字段的检索?
  • 如何取出binary字段中的任意几位?
  • 高分求:能按时间字段和自动增量字段结合排序的分页存储过程。。排序时如:order by 时间字段 desc,id desc
  • 如何读出任意Access数据库的表名和字段名?
  • 谁有用户自选择任意字段查询的源程序?
  • 如何把任意文件存到一个SQL Server的一个字段中。

关键词

  • 字段
  • 排序
  • 查询
  • sql
  • 分页
  • getrecordfrompage
  • 降序
  • varchar
  • 条件
  • 类型

得分解答快速导航

  • 帖主:520luoxp
  • luby
  • jyk

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

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