Mssql查询序列每次都在更改

Mssql查询序列每次都在更改,sql,sql-server,sql-order-by,Sql,Sql Server,Sql Order By,对于Erp版本升级,我们复制了数据库并恢复到新数据库。我们换了桌子。(添加新列或更改宽度等。我们删除索引并重新创建)。毕竟我们测试了新数据库,发现了这样的情况 我们有这样一个问题 select top 5 * from table. 旧数据库:当我们连续运行查询时,结果顺序不变 新数据库:当我们运行时,结果的顺序会发生变化 我认为存在聚集索引问题,但我不知道如何确定和解决它。有任何帮助吗?除非您使用order by,否则订单不受保证 旧数据库可能在表上创建了聚集索引。请检查一下。但即使是聚集

对于Erp版本升级,我们复制了数据库并恢复到新数据库。我们换了桌子。(添加新列或更改宽度等。我们删除索引并重新创建)。毕竟我们测试了新数据库,发现了这样的情况

我们有这样一个问题

select top 5 * from table. 
旧数据库:当我们连续运行查询时,结果顺序不变

新数据库:当我们运行时,结果的顺序会发生变化


我认为存在聚集索引问题,但我不知道如何确定和解决它。有任何帮助吗?

除非您使用order by,否则订单不受保证


旧数据库可能在表上创建了聚集索引。请检查一下。但即使是聚集索引也不能保证排序。

除非您使用order by,否则不能保证排序


旧数据库可能在表上创建了聚集索引。请检查一下。但是,即使是聚集索引也不能保证排序。

如果在TOP语句之后不使用ORDER BY语句,则数据库引擎不能保证结果集的顺序。 SQL Server希望在某些情况下快速返回符合条件的行,此机制被调用,并且您的查询执行计划很可能使用此机制。另一方面,聚集索引操作符包含一个有序的属性,这向我们展示了检索到的行是否以有序的方式获取。

如果在TOP语句之后不使用ORDER BY语句,则数据库引擎不保证结果集的顺序。 SQL Server希望在某些情况下快速返回符合条件的行,此机制被调用,并且您的查询执行计划很可能使用此机制。另一方面,聚集索引操作符包含一个有序的属性,这向我们展示了检索到的行是否以有序的方式获取。

您的查询没有“订单依据”,因此结果中没有保证订单。保证特定排序顺序的唯一方法是使用orderby,但是旧的数据总是一样的,所以你很幸运。保证特定排序顺序的唯一方法是使用
orderby
请参阅文档
除非指定了orderby子句,否则结果集中返回行的顺序不保证。
您在sql(和咨询)中学到了一个不幸而可怕的教训。您的代码有很大的缺陷,而此更改现在暴露了其中一个缺陷。您必须修复代码,安全的假设是还有其他缺陷等待发现。您的查询没有排序依据,因此结果中没有保证的排序。保证特定排序顺序的唯一方法是使用orderby,但是旧的数据总是一样的,所以你很幸运。保证特定排序顺序的唯一方法是使用
orderby
请参阅文档
除非指定了orderby子句,否则结果集中返回行的顺序不保证。
您在sql(和咨询)中学到了一个不幸而可怕的教训。您的代码有很大的缺陷,而此更改现在暴露了其中一个缺陷。您必须修复代码,安全的假设是还有其他缺陷等待发现。