1

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

select * from PD where ESE='bycad'

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

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

4

1 回答 1

9

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

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

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

于 2012-12-21T09:19:39.330 回答