CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

求助:按时间排序的存储过程分页问题

楼主iamtrueman()2003-09-01 11:47:55 在 MS-SQL Server / 疑难问题 提问

我看过一些存储过程分页的例子,都是基于唯一字段来排序的,但我现在的需求是要根据datetime字段来排序,而表中的datetime字段与其唯一id字段并无关系。这就有点麻烦了,不能简单地通过获得开始、结束id来select某一行集。我想过用表变量,但由于表变量不支持insert   into   ...   select   ...   或select   ...   into   ...的格式,再加上我需要传入表名参数使该存储过程能实现共用,因此表变量这个思路似乎行不通。而如果改用临时表,开销又太大了,失去了实质意义。  
  哪位朋友有较好的解决方法? 问题点数:100、回复次数:8Top

1 楼skxcall()回复于 2003-09-01 11:53:31 得分 0

这就有点麻烦了Top

2 楼pengdali()回复于 2003-09-01 11:55:19 得分 10

CREATE   PROCEDURE   GetProductsPaged  
  @lastProductID   int,  
  @pageSize   int  
  AS  
  SET   ROWCOUNT   @pageSize  
  SELECT   *  
  FROM   Products  
  WHERE   [standard   search   criteria]  
  AND   ProductID   >   @lastProductID  
  ORDER   BY   [Criteria   that   leaves   ProductID   monotonically   increasing]  
  GOTop

3 楼txlicenhe(马可)回复于 2003-09-01 11:58:36 得分 40

1:可以用表变量  
  declare   @a   varchar(10)  
  set   @a   =   'abc'  
  exec   ('Select   *   into   '   +   @a   +   '   from   sysprocesses   order   by   spid')  
  select   *   from   abc  
  2:  
        可以生成一个新的唯一字段来排序  
        select   identity(int,1,1),*   into   #tmp   from   表    
        再对#tmp进行分页处理。Top

4 楼skxcall()回复于 2003-09-01 12:05:35 得分 0

使用临时表不是很占内存吗!Top

5 楼hjhing(winding)回复于 2003-09-01 12:06:54 得分 50

 
  ----比如是第6页(每页面10条记录)  
  select   top   10   *   from   yourTable  
  where   [ID]   in   (select   top   60   [id]   from   yourTable   order   by   [datetimeF])  
  and   [ID]   not   in(select   top   50   [id]   from   yourTable   order   by   [datetimeF])  
  order   by   datetimeF  
   
  -----然后你将以上语句用exec(@str)的形式根据输入参数生成SATRING然后执行即可  
   
  -----同用#虚拟表一样,效果不会很好,尤其是页码很大时  
   
  -----但你的需求决定了如果你的数据量很大时,必定造成效率降低Top

6 楼hjhing(winding)回复于 2003-09-01 12:08:31 得分 0

-----使用临时表不是很占内存吗!  
   
          不要绝对排弃虚拟表!Top

7 楼iamtrueman()回复于 2003-09-01 14:08:32 得分 0

to   txlicenhe:  
  不能用表变量,因为表变量与传入的表名参数无法同时合成exec()的@str。类似exec   ('Select   *   into   @表变量   from   '   +   @传入表名   +   '   order   by   spid')的形式是行不通的。至于新建一唯一字段,由于用到了临时表,不适合我的大数据量要求。  
  Top

8 楼iamtrueman()回复于 2003-09-01 15:25:48 得分 0

to   hjhing:  
  用in太消耗资源了吧?Top

相关问题

  • 存储过程分页中如何支持排序?
  • 求一个分页的存储过程:用GetRecordFromPage按ID排序到是可以。到是我想以时间字段可就麻烦了。。想求一个按任意字段排序的分页存储过程
  • 高分求:能按时间字段和自动增量字段结合排序的分页存储过程。。排序时如:order by 时间字段 desc,id desc
  • help:分页存储过程。。。。。。。。。
  • 求分页存储过程
  • 分页存储过程
  • 求助!! 找到个好的存储过程 ,可不能对时间排序???
  • 高分找分页的存储过程?
  • 老问题,存储过程分页
  • 分页存储过程~求解~

关键词

  • 字段
  • 排序
  • 存储过程
  • top
  • 表
  • 分页
  • 变量
  • datetimef
  • 传入
  • 参数

得分解答快速导航

  • 帖主:iamtrueman
  • pengdali
  • txlicenhe
  • hjhing

相关链接

  • SQL Server类图书

广告也精彩

反馈

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