我运行了以下代码
我只是无法理解计算机如何评估此类代码以使 cte_count 永远终止。
在我看来它是这样的:
首先:n + 1 是什么意思?就我而言,n 是列的名称。
假设 n + 1 只是以某种方式增加了一个计数器: 其次,当之前评估 cte_count 时,如何检查终止条件。
我希望有人能更清楚地说明此类查询是如何工作的。
我只是无法理解计算机如何评估此类代码,从而导致
永远终止。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,就像这样