SQL Server TOP关键字返回不同的结果

时间:2015-12-22 04:49:08

标签: sql-server

我对表格有一个T-SQL查询,我需要返回顶行。在MySQL中,这是按预期工作的,但在SQL Server中,我得到的是返回的不同数据,这非常令人费解。

我附加了三个屏幕截图:1个表格设计,当查看前10行时返回的数据中的1个和查看前1000行时返回的1个数据。您会注意到最上面一行包含两个查询之间 name 列的不同信息。

查询中唯一的区别是TOP关键字的计数值。该表共有7行数据。 Top 1000的结果包含返回的行的正确顺序。这里发生了什么?

为什么SQL Server会根据TOP关键字的计数值更改返回的行的顺序?无论有多少行被返回,任何人都可以解释或提供保持这种一致性的方法吗?

Table design

Top 10

Top 1000

3 个答案:

答案 0 :(得分:6)

输出中没有差异或问题。您按宽度排序,前2个宽度相同,并且您没有任何子排序,因此它将决策留给RDBMS(特别是其查询优化器)以显示whichever first

您还应在itemNumber

之后将ORDER BY添加到Width子句中
ORDER BY Width, itemNumber

答案 1 :(得分:6)

Order by 无法保证为相同的值提供相同的结果,因为SQL表表示无序集。因为你的宽度是相同的,所以你会得到不同的结果。

要获得唯一结果或使排序稳定,您需要在itemNumber子句中添加order by等列名。

答案 2 :(得分:0)

要在这个问题中添加一些上下文,我试图实现的是MySQL和MSSQL在返回的行的顺序中的一致性。我正在将一个使用MySQL的项目转换为MSSQL,这给我带来了一个问题。获得我想要的解决方案是使用Set Rowcount 1来限制返回的行数。这产生了一行数据,其排序方式与MySQL相同。