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