. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据库
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  请教:Sybase分页的语句  [已解决] 回复[ 3次 ]   点击[ 594次 ]  
doit
[帖 主]   [ 发表时间:2009-02-18 22:19 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:6
注册日期:2009-02-09 10:54
项目要做一个数据库导出的功能,由于数据库的数据量会很大,
所以查询的时候考虑分页查出来,分批写入文件的方式。

oracle下还好办,可以根据rowid来分页

在Sybase下就难办了,
另外由于之前系统的表设计的不太好,很多都没有主键(现在不能去改那些数据库了,牵涉很多...)

不知道各位大侠有没有办法用sql来对Sybase进行分页呢?

之前在有id为主键的情况下,Sybase倒是有个办法:
set rowcount 10 (select * from tablename) set rowcount 0
下一页可以用:
set rowcount 10 (select * from tablename where id>10) set rowcount 0
依次分下去。

不知道在没有主键的情况下,如何分呢?
mess
[第1楼]   [ 回复时间:2009-02-23 17:49 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
不怎么用数据库了,帮楼主踩踩吧:)~
doit
[第2楼]   [ 回复时间:2009-02-25 22:23 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:6
注册日期:2009-02-09 10:54
多谢。

后来没用SQL来解决,取了个比较折中的办法,
在获取结果集后,根据传入的需要取的数据的起始和结束序号(如取100-110),
然后遍历结果集取起始和结束序号之间的记录,然后跳出循环即可

这样可以在不同的数据库类型都能通用,
另外估计数据量大的情况下,估计会有性能问题,不过我在100W数据的情况下测试,还是可以接受的..

可能不是最科学的办法吧,希望能给后面的朋友以帮助和启发.
大家有更好的办法也拿出来分享吧~~~
doit
[第3楼]   [ 回复时间:2009-03-02 10:19 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:6
注册日期:2009-02-09 10:54
此贴由 贴主 于 [ 2009-03-02 10:19 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(mess):4分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved