2011-05-26 114 views
2

在一台机器中,我们有一组数据并说我们有一列isValid,其中包含true或false,并且我们还有另一列定义一个组。对于每个组,只能有对于Isvalid列,其中一个值为true,其余为false。相同的查询在SQL中产生不同的结果

现在,当我们运行基于Group的查询时,包含Isvalid列的行为True作为查询结果中的第一行,而其余行包含Isvalid列,这些列为false。

在这里我们不使用任何'order by'或'group by',我们只是使用'inner join'和'where'的条件。

问题是在我们的开发服务器和测试服务器上我们得到了预期的查询结果,但是当它进入活动服务器时(对于所有三个服务器,即开发,测试和实时服务器,数据完全不同,所有这些服务器在相同版本的SQL 2005上运行)时,结果会互换(使用isvalid列的行false作为查询结果中的第一行)不知道为什么。请提供任何建议?

请帮帮忙,

非常感谢, Byfour

回答

5

明显的答案是:在测试,开发和实时服务器不同的数据。

但即使使用相同的数据,没有ORDER BY子句,结果通常以聚簇索引顺序返回,但这是而不是保证。

如果您需要特定顺序的结果,那么您的必须使用ORDER BY子句。

+3

100%同意米奇在这里。没有ORDER BY,那么订单不能保证。期。碎片化,旋转扫描很少出现ORDER BY无法保证顺序的情况。 http://msdn.microsoft.com/en-us/library/ms191475.aspx – 2011-05-26 07:31:44