我正在使用Microsoft SQL Server 2019并在执行时:
SELECT TOP 10 * FROM WideWorldImporters.Sales.Invoices SELECT TOP 10 CustomerID FROM WideWorldImporters.Sales.Invoices
结果如下:
这是不正确的,因为它们不是第一个查询显示的“前10个”客户ID。
完整截图:
编辑:我上面期望的行为与SQL Sever 2014中实际发生的情况相同。我怀疑它们更改了SQL Server 2019中的基础实现,尽管它仍满足已记录的行为。
没有ORDER BY的TOP是不可预测的。这是由Microsoft记录的。从Microsoft文档:
当您将TOP与ORDER BY子句一起使用时,结果集限制为前N个有序行。否则,TOP将以不确定的顺序返回前N行。
...
在SELECT语句中,始终将ORDER BY子句与TOP子句一起使用。因为,这是可预测地指示哪些行受TOP影响的唯一方法。
另请参见未指定排序依据时SELECT TOP如何工作?