我有一个可以与多个DB,MYSQL,ORACLE,MS SQL和WB通信的ORM层
我在我的应用程序中签名,我不知道我能得到结果
作为页面直接来自查询,所以我更新ORM层以适应3个DB
我提到过。
在MYSQL SELECT * FROM myTable limit 5,5
中
在ORACLE SELECT * FROM ( SELECT * FROM myTable as t WHERE rownum < 100 ) WEHRE rownum > 10
中
但在MS SQL中,我找不到在查询中获取ORDER BY
的方法
我为查询中的任何语法错误道歉,它们来自内存。
我的问题是,有没有办法摆脱ORDER BY
并获得MS SQL的分页功能
答案 0 :(得分:4)
请重新思考你在这做什么。
无论您使用什么数据库引擎,当您想要使用分页时,尝试摆脱ORDER BY
绝对没有意义。
关系数据库中的行没有固定的顺序,如果要按特定顺序接收行,则需要指定ORDER BY
子句。
如果未指定ORDER BY
子句,则数据库引擎将以随机顺序返回行。通常,订单看起来很合理(例如,按主键排序),如果您多次运行相同的查询,订单可能真的相同。
但实际上,这都是随机的,你不能依赖这个“伪命令”在每个查询中有任何意义或相同。
因此,在没有自己指定顺序的情况下进行分页绝对没有意义。
答案 1 :(得分:2)
尝试
SELECT
*
FROM
( SELECT *,ROW_NUMBER() OVER (ORDER BY <some_col>) as rownum FROM myTable ) t
WHERE rownum >= UpperLimit AND rownum <= LowerLimit
将<some_col>
替换为表格中的某个列,该列定义了您要分页数据的顺序。
答案 2 :(得分:1)
我不确定问题是什么。你可以写:
select TOP 10 * from T
这很好用。
这通常没有意义,因为不保证特定的顺序。它甚至可以从查询更改为查询。
但如果你关心的只是从特定的表中获取任何 10条记录,可以有意义。