【发布时间】:2018-11-09 15:16:20
【问题描述】:
如果我的 CTE 的递归部分没有连接,每次递归只能得到一行,这是为什么呢?
在 SQL Server 2016 和 Azure SQL 数据库上测试的代码:
DECLARE @Number TABLE (Number INT);
INSERT INTO @Number (Number)
VALUES (1), (2);
;WITH _cte AS
(
SELECT Number
FROM @Number
UNION ALL
SELECT _cte.Number
FROM _cte
)
SELECT *
FROM _cte
OPTION (MAXRECURSION 2); -- just call recursive part twice to see the issue
在结果中,我在每个递归/深度中得到数字 2。
我希望当前行在每次递归中重复,因此行数呈指数增长
预期输出
Number
--------------------
1 -- from anchor
2
1 -- first recursion
2
1 -- second recursion
2
1
2
实际输出:
Number
--------------------
1 -- from anchor
2
2 -- first recursion
2 -- second recursion
【问题讨论】:
-
编写的代码会抛出错误。
-
感谢@MartinSmith - 该链接证实了我对答案的怀疑。当我尝试不同的查询时,结果的顺序看起来像一个堆栈,结果按顺序推送,堆栈上的最后一项弹出进行递归,您链接的帖子证实 SQL Server 确实在内部以这种方式工作。
标签: sql-server common-table-expression recursive-query