0

我正在开发一个旧的 VB6.0 应用程序,该应用程序正在转换为 C#。在应用程序中查询了许多 SQL Server 视图。我在 VB6.0 和 C# 中传递相同的 SELECT 语句来查询视图。我还在每种语言中提供完全相同的 WHERE 子句,并且没有 ORDER BY 子句。视图确实包含它们自己的 ORDER BY 子句。

在 VB6.0 中,结果集始终以相同的顺序返回,而在 C# 中,结果集始终以相同的顺序返回。但是,返回到 VB6.0 和 C# 的命令不匹配。我可以通过VB6.0查询,几秒后通过C#查询,结果集顺序不同。

什么可能导致结果集顺序不同?我需要将从新的 C# 代码生成的一些输出文件与 VB6.0 代码进行比较以进行验证,所以我希望结果集以相同的顺序返回,或者至少了解结果集的原因VB6.0 和 C# 之间的顺序不匹配,但从相同语言调用时总是相互匹配。

4

1 回答 1

12

如果您不指定,ORDER BY永远无法保证记录返回的顺序。

该顺序通常会以与聚集索引或数据/模式的某些其他特征相关的顺序返回。但它可以在没有警告或你能感知的原因的情况下改变。
- 可能是由于哪些核心忙或不忙
- 可能是由于您与 SQL Server 一起使用的接口
- 可能是由于最近引入的记录
- 或碎片
- 或表/结果的缓存
- 或 SQL Server 或操作系统上的补丁


如果顺序很重要,请在最终/最外层查询上指定 ORDER BY 。

于 2013-07-30T20:04:47.573 回答