递归 SQL 查询如何终止以及如何评估它们?

问题描述 投票:0回答:1

我运行了以下代码

我只是无法理解计算机如何评估此类代码以使 cte_count 永远终止。

在我看来它是这样的:

  1. cte_count 是一个表,其中包含名为 n 的列,其中包含 1 和(递归成员)
  2. 的结果

首先:n + 1 是什么意思?就我而言,n 是列的名称。

假设 n + 1 只是以某种方式增加了一个计数器: 其次,当之前评估 cte_count 时,如何检查终止条件。

我希望有人能更清楚地说明此类查询是如何工作的。

sql recursion
1个回答
1
投票

我只是无法理解计算机如何评估此类代码,从而导致

cte_count
永远终止。

简单的回答是它不知道。 递归 CTE 最多只会重复 32,767 次或无限次。请参阅官方 microsoft 文档,然后抛出已达到最大递归值的信号。可以使用

MAXRECURSION
属性设置最大递归的确切数量(
0
表示无限)。

是的

N
是列的名称。还有递归查询部分

select n+1  from cte_count where n<50

的简写
select n+1  as n from cte_count where n<50

在这种情况下,union all 子句中的未命名列采用与

UNION ALL
语法上部类似定位的列相同的数据类型和名称。

所以想象一下,当 N 被推入具有单列

cte_count
的表中时,从 select 1 开始 CTE,就像这样

N1
然后第一次递归对该表进行操作以给出结果

N2
这两个被联合起来,给出新的 cte_count 表作为

N12
下一次递归使用上表作为输入,得到结果为

N23
与现有的 cte_count 表进行联合,将更新后的 cte_count 为

N123
© www.soinside.com 2019 - 2024. All rights reserved.