gpt4 book ai didi

SQL Server - 不按子句进行分页

转载 作者:行者123 更新时间:2023-12-04 02:06:43 25 4
gpt4 key购买 nike

我的情况是,向​​程序提供了一个不可预测的 SQL 语句,我需要在它之上进行分页。最终的 SQL 语句将类似于以下语句:

SELECT * FROM (*Given SQL Statement*) b 
OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY;

这里的问题是 *Given SQL Statement*是不可预测的。它可能包含也可能不包含 order by 子句。我无法更改此 SQL 语句的查询结果,我需要对其进行分页。

我在网上搜索了解决方案,但都建议在 order by 子句中使用任意列,如主键。但它会改变原来的顺序。

最佳答案

简短的回答是它不能完成,或者至少不能正确完成。

问题是 SQL Server(或任何 RDBMS)不能也不能保证从没有 order by 的查询返回的记录的顺序。条款。
这意味着您不能对此类查询使用分页。
此外,如果您在结果集中多次出现的列上使用 order by 子句,则在所述列中的值组内仍不能保证结果集的顺序 - 快速示例:

;WITH cte (a, b)
AS
(
SELECT 1, 'a'
UNION ALL
SELECT 1, 'b'
UNION ALL
SELECT 2, 'a'
UNION ALL
SELECT 2, 'b'
)

SELECT *
FROM cte
ORDER BY a

两个结果集都是有效的,你不能提前知道你会得到什么:
a   b
-----
1 b
1 a
2 b
2 a

a b
-----
1 a
1 b
2 a
2 b

(当然,你可能会得到其他种类)

关于SQL Server - 不按子句进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42783379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com