主题:请问SQLServer2000中限制用户返回的行数!
东东1204
[专家分:270] 发布于 2005-11-04 03:04:00
我现在需要做一个分页程序,用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个回复)
沙发
singleminded [专家分:490] 发布于 2005-11-04 17:10:00
select top n * from a order by 主键 asc
where 主键 no in(select top n * i 主键 from a order by 主键 desc)
板凳
东东1204 [专家分:270] 发布于 2005-11-06 15:24:00
非常感谢singleminded的解答
可是我在查询分析器中调试不成功,有两个错误
第一个no in 应该是not in,这个我已经改过来了
第二个就是括号中的第二个查询子句总是提示出错,可能是我理解错了你的变量i的意义
请给我详细说明一下原理及各个变量意义,再次谢谢!
我先在有一个分页的类,能够输出两个变量:一个是$displaypg :每页可以显示的记录数,是一个常数,相当与你所写SQL语句中的n;
另一个是$firstcount :每次查询的起始项,是一个动态数据,是每页可显示的记录数与已经显示过的记录数之和
写查询的SQL语句时只能充分利用这两个变量!
再次感谢!
3 楼
yudi010 [专家分:0] 发布于 2005-11-08 15:10:00
遗漏的做法不可取,因为这样查询的速度会满了很多
不过我也没有好的解决方法
大家继续把
4 楼
东东1204 [专家分:270] 发布于 2005-11-10 12:50:00
可是1楼的朋友所提供的语句我调试不成功,还有参数i是什么?望告知!
我来回复