递归 CTE 简介

SQL Server 中的分层与递归查询

Jasmin Ludolf

Content Developer

递归 CTE

由 4 部分组成:

WITH cte_name AS (

-- 锚定成员 initial_query
UNION ALL -- 递归成员 recursive_query termination_condition )
SELECT * FROM cte_name
SQL Server 中的分层与递归查询

递归 CTE 使用指南

  • 超过 100 次递归时,需提高递归步数:

    • OPTION(MAXRECURSION 32767)
  • 不允许使用以下 SQL 语句:GROUP BYHAVINGLEFT JOINRIGHT JOINOUTER JOINSELECT DISTINCTSubqueriesTOP

  • 锚定成员与递归成员的列数必须相同

  • 锚定成员与递归成员的数据类型必须相同

SQL Server 中的分层与递归查询

递归示例

计算阶乘:

n 的阶乘是小于等于 n 的所有正整数之积:

3! = 1 x 2 x 3 = 6

阶乘 n! 的递归定义:

  • 0! = 1,iteration = 1
  • (n+1)! = n! * (iteration+1),当 iteration > 1
SQL Server 中的分层与递归查询

代码中的递归示例

WITH recursion AS

(SELECT 1 AS iterationCounter,1 AS factorial
UNION ALL SELECT iterationCounter+1,factorial * (iterationCounter+1) FROM recursion
WHERE iterationCounter < 10 )
SELECT factorial FROM recursion
3628800
SQL Server 中的分层与递归查询

让我们来练习!

SQL Server 中的分层与递归查询

Preparing Video For Download...