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


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 没有结果集或表的内置排序。 因此,领带可以按任何顺序出现。 解决方案是包含一个唯一值(如主键(作为最终键。

最新更新