没有'order by'的 SQL 'select top 1' 带有'top 100 percent ... order by ...'声明的视图会产生意外结果



我有以下视图

CREATE VIEW ...
AS SELECT        TOP (100) PERCENT ...
FROM            ...
INNER JOIN ...
ON ...
WHERE    ...
ORDER BY datetime2 DESC

我还有一个带有没有"ORDER BY"声明的SELECT TOP(1) ... FROM ... WHERE ...。(我也在修(。执行这个usp的程序也在依赖表中写入了大量信息。因此,当视图获得新信息时,可以执行请求。

首先,我们执行了一些"SELECT。。。其中…'关于视图的语句,未排序结束。为什么它没有排序,视图应该按datetime2列对它进行排序。

我期望"SELECT TOP(1("语句在没有"ORDER by"附加的情况下得到混合结果。但实际上,正如预期的那样,错误的结果较少,而且是在特定的时期。4月2天,11月2天。视图中的数据也是混合的,不应该有统计上的原因,为什么结果比其他数据更经常给我一些数据。

我找不到数据之间的任何联系,在环境中也找不到。这只是一个不幸的情况吗?一个让我思考的"陷阱",有没有联系?

有没有办法重现"失败"。(实际上这是系统的正确行为(?

我希望你有足够的信息来帮助我!如果有什么问题,我当然会回答。

编辑当天-09:32 UTC:usp的重要部分是,它将"SELECT TOP(1(。。。来自。。。在哪里…"。周围没有条件。

ORDER BY是一个"Cosmolic";SQL子句,它只显示查询的完整SQL策略之后的行之间的顺序。因为发动机没有";订单;为了操作查询计划中使用的不同算法,在结果集中随机放置行。

视图并不排除此规则,因为您随时都可以在视图的SELECT上添加ORDER BY子句。

所以ORDER BY,无论在查询中使用什么技巧,都不会对最终的SQL命令产生影响:SELECT、INSERT、MERGE、UPDATE或DELETE。

在使用视图或表的UDF时,查询中绝对没有默认顺序

相关内容

最新更新