关于分页显示的问题。

whalefish2001 2006-06-01 05:37:10
我不知道如何做分页显示,唉
现在的问题是:
问题是这样的,有一个sql语句,类似如下:

select * from(
(select * from abc)union all(select * from abc)union all(select * from abc)) as cc

其中,abc的主键未知,字段未知。abc是动态拼成的表(实际上,abc的关系很复杂)
要对其进行分页显示,该如何做呢?(最好不用游标实现,如果可能,最好是sql语句<存储过程也可以>。效率优先!)
我已经做好了 string mystring = "((select * from abc)union all(select * from abc)union all(select * from abc))"



要对这个表查出的结果进行分页显示,当然了,实际上的情况比这个复杂,这个只是简化了而已。
大体上的情况是:
1.要分页的表中可能出现重复数据。
2.要分页的表中不确定有什么字段,也就是说,上面表中的abc 是动态生成的,拼凑成的,该如何做呢?
最好不要把我的union all 拆开,因为用到的union / union all 等的个数未知。
也就是说,把一个未知表进行分页显示。

如果只能用游标,那能给出代码吗?
...全文
367 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jaway 2006-08-09
  • 打赏
  • 举报
回复
(select * from abc)union all(select * from abc)union all(select * from abc)) as cc
可以先创建带某个自增1的tempid字段的临时表,再用fcuandy(www.iDotNet.org) 代码
whalefish2001 2006-08-09
  • 打赏
  • 举报
回复
fcuandy(www.iDotNet.org) 很好,但是,id 是从哪里出现的呢?
我说增加一个索引,但是不知道如何增加,而不是没有增加就直接使用呀.
如果这样写的话,数据库肯定会报告ID列名错误.
问题还是没有解决,哎!
heimao111 2006-08-09
  • 打赏
  • 举报
回复
关注中,确实很麻烦。
想到用临时表或者表变量来解决,好像都行不通
fcuandy 2006-06-16
  • 打赏
  • 举报
回复
string SQL ="SELECT TOP " + pagesize + " * FROM 你生成那个 WHERE id<(SELECT MIN(id) FROM (SELECT TOP " + pagezie * (Page-1) + " id FROM 你生成那个 ORDER BY id DESC) a) ORDER BY id DESC"

pagesize为每页多少条记录, page为当前页码
改写时注意别名.
whalefish2001 2006-06-16
  • 打赏
  • 举报
回复
...
whalefish2001 2006-06-11
  • 打赏
  • 举报
回复
我现在是实现最重要,要求给出个合理的语句来.
而不是总说写理论上的东西.好吗?
whalefish2001 2006-06-11
  • 打赏
  • 举报
回复
其实,我想了个办法,就是不知道如何实现.
就是从
select < 这里添加个索引,自增的,最后用order by 这个索引即可 >,* from(
(select * from abc)union all(select * from abc)union all(select * from abc)) as cc
johnhzjx 2006-06-11
  • 打赏
  • 举报
回复
还有种方法,对SQL语句进行判断 indexof(distinct),indexof(from) indexof(order) indexof(group) 把几个会影响到数据记录数的关键字.或可能产生重复数据的关键字进行过滤,
比如可能产生重复记录,那么默认去distinct第一字段名(字符串操作)
可以SQL中带有ORDER和GROUP的,那就进行相应的改造...ORDER的去掉, GROUP改为DISTINCT的写法
也就是把SQL中关键字取出,然后判断各种类型的SQL语句,然后在拼SQL
whalefish2001 2006-06-05
  • 打赏
  • 举报
回复
呵呵,没办法优化的,SQL没法优化,因为SQL语句片段是写在数据库中的(数据库中的数据其实就是SQL语句,读取的字段名,表明,条件等 ),
我从数据库中读取数据sql语句片段,然后根据一定条件添加 SELECT,FROM,WHERE,UNION 等字段.
要是优化的话,也就是把 SELECT 用 S 代替,少几个字符而已.
但是,最后还得复原。

事先,我不知道数据库中都记录的是什么数据(什么条件)
我只能提取出来,然后拼成一个正确的sql语句。最后执行,但分页显示呢????

以上只是个例子,是三张一样的表,实际情况是,不一定是三张表,三张表也不一定一样。
我的SQL语句已经能够拼出来了,并且正确执行,就是到分页显示被卡住了。
新鲜鱼排 2006-06-02
  • 打赏
  • 举报
回复
那你就把Union all 产生的数据源作为一个整体,然后获取某一页需要的数据。
select top 10 * from(
(select * from abc)union all(select * from abc)union all(select * from abc)) as cc
johnhzjx 2006-06-02
  • 打赏
  • 举报
回复
做一个视图关联三张表,然后从视图取数据.
还有一种就是去优化你的SQL,SQL是死的,人是活,完全有可能从你现在业务逻辑上拼出你要SQL.
whalefish2001 2006-06-02
  • 打赏
  • 举报
回复
我也是这么想的.但我要的是实现啊!
dutguoyi(新鲜鱼排) 知道什么是分页吧,
不是只获取前XX行而已。
whalefish2001 2006-06-01
  • 打赏
  • 举报
回复
忘记了,还有一点,我用的是 SQLServer 2000 不是 2005.

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧