回 帖 发 新 帖 刷新版面

主题:请问SQLServer2000中限制用户返回的行数!

我现在需要做一个分页程序,用SQLServer2000做数据库,现在需要限制返回行,我用select top N form ..... 来限制用户返回的行数,但是不能把下一次的查询起始行放到N+1,也就是能不能跳过现在已经查询出来的N行,从N+1行开始查询
比如:有没有象mysql中的limit i,j(第一次取i行,第二次从i+1开始取),或者是Interbase(firebird)中的first i skip j(第一次取i行,第二次从i+1开始取)

请问在SQLServer2000中实现这样的效果的sql语句怎么写?
还有SQLServer2000中的skip子句是起什么作用?

回复列表 (共4个回复)

沙发

select top n * from a order by 主键 asc
where 主键 no in(select top n * i 主键 from a order by 主键 desc)

板凳

非常感谢singleminded的解答
可是我在查询分析器中调试不成功,有两个错误
第一个no in 应该是not in,这个我已经改过来了
第二个就是括号中的第二个查询子句总是提示出错,可能是我理解错了你的变量i的意义

请给我详细说明一下原理及各个变量意义,再次谢谢!

我先在有一个分页的类,能够输出两个变量:一个是$displaypg :每页可以显示的记录数,是一个常数,相当与你所写SQL语句中的n;
                                      另一个是$firstcount :每次查询的起始项,是一个动态数据,是每页可显示的记录数与已经显示过的记录数之和

写查询的SQL语句时只能充分利用这两个变量!

再次感谢!

3 楼

遗漏的做法不可取,因为这样查询的速度会满了很多
不过我也没有好的解决方法
大家继续把

4 楼

可是1楼的朋友所提供的语句我调试不成功,还有参数i是什么?望告知!

我来回复

您尚未登录,请登录后再回复。点此登录或注册