SQL Server 中的分层与递归查询
Jasmin Ludolf
Content Developer
由 4 部分组成:
WITH cte_name AS (-- 锚定成员 initial_queryUNION ALL -- 递归成员 recursive_query termination_condition )SELECT * FROM cte_name
超过 100 次递归时,需提高递归步数:
OPTION(MAXRECURSION 32767)不允许使用以下 SQL 语句:GROUP BY、HAVING、LEFT JOIN、RIGHT JOIN、OUTER JOIN、SELECT DISTINCT、Subqueries、TOP
锚定成员与递归成员的列数必须相同
锚定成员与递归成员的数据类型必须相同
计算阶乘:
n的阶乘是小于等于n的所有正整数之积:
3! = 1 x 2 x 3 = 6
阶乘 n! 的递归定义:
0! = 1,iteration = 1(n+1)! = n! * (iteration+1),当 iteration > 1WITH recursion AS(SELECT 1 AS iterationCounter,1 AS factorialUNION ALL SELECT iterationCounter+1,factorial * (iterationCounter+1) FROM recursionWHERE iterationCounter < 10 )SELECT factorial FROM recursion
3628800
SQL Server 中的分层与递归查询