ORDER BY 是先排序然后偏移和获取还是仅对获取的列执行排序?

Does ORDER BY sort first and then Offsets and Fetches or does it perform the sort only on the fetched columns?

ORDER BY (CASE @Lang WHEN 'fr' THEN [SUBS_NAME_F] ELSE [SUBS_NAME_E] END)
OFFSET (@PageNumber - 1) * @ItemsPerPage ROWS
FETCH NEXT @ItemsPerPage ROW ONLY

我认为这是造成我的问题的存储过程的一部分。

问题是当我 运行 在我的网站上查询时,我根据 @ItemsPerPage 值得到不同顺序的结果,例如值 50 和值 500 将产生查看拉出的前几行时会出现不同的结果。

我认为发生这种情况是因为我提取了 50(或 @ItemsPerPage 数量)我需要的行,然后按 ORDER BY 对它们进行排序,这导致了不同的排序结果。我的假设是正确的还是我的错误在其他地方?如果这是正确的,那么有什么办法可以解决这个问题吗?

先执行ORDER BY。通常,所有数据都已排序,但使用索引可能会更有效。

FETCH 然后获取 OFFSET 之后的行——这是从零开始的而不是从一开始的。因此,第一行的 OFFSET 为 0,因此第 50 行的偏移量为 49.

如果 ORDER BY 在键值中有联系,那么它们可以以任意顺序出现。 SQL 没有内置的结果集或表排序。所以关系可以以任何顺序出现。解决方案是包含一个唯一值(例如主键)作为最终键。