在缺少ORDER BY子句的情况下,为什么SQL Server 2000的行为与SQL Server 2008不同?

时间:2012-12-21 09:17:37

标签: sql sql-server-2008 sql-server-2008-r2 sql-server-2000

我们正在使用SQL Server 2008 R2。我们有一个名为PD(6列)的表,它有一个NO主键,没有任何列的索引。当我们执行查询

select * from PD where ESE='bycad'

没有ORDER BY子句,每次执行相同的查询时,我们都会以不同的顺序获得结果。我们曾经在两个月前使用SQL Server 2000,但从未遇到过这个问题。

这是SQL Server 2008中的错误吗?我知道我们应该使用ORDER BY子句,但是为什么SQL Server 2008在没有ORDER BY子句的情况下处理不同的SQL查询?

1 个答案:

答案 0 :(得分:9)

来自SQL Server的任何结果集都是一个集合。集合没有固有的顺序。

除非指定了“ORDER BY”,否则从没有任何命令保证行从select语句返回。 (对于任何rdbms,不仅是SQL Server)都是如此

编辑: 要回答您的问题,您在每次执行时看到不同顺序的原因很可能是由表的并行扫描“引起”。你有新的硬件吗?但同样,如果您需要订购结果,则需要指定“ORDER BY”。