我对表格有一个T-SQL查询,我需要返回顶行。在MySQL中,这是按预期工作的,但在SQL Server中,我得到的是返回的不同数据,这非常令人费解。
我附加了三个屏幕截图:1个表格设计,当查看前10行时返回的数据中的1个和查看前1000行时返回的1个数据。您会注意到最上面一行包含两个查询之间 name 列的不同信息。
查询中唯一的区别是TOP
关键字的计数值。该表共有7行数据。 Top 1000
的结果包含返回的行的正确顺序。这里发生了什么?
为什么SQL Server会根据TOP
关键字的计数值更改返回的行的顺序?无论有多少行被返回,任何人都可以解释或提供保持这种一致性的方法吗?
答案 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相同。