MS sql限制语句无顺序和无顶

时间:2012-01-22 15:32:20

标签: mysql sql-server oracle orm

我有一个可以与多个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的分页功能

3 个答案:

答案 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条记录,可以有意义。