遞迴 CTE 入門

SQL Server 的階層式與遞迴查詢

Jasmin Ludolf

Content Developer

遞迴 CTE 結構

由 4 個部分組成:

WITH cte_name AS (

-- Anchor member initial_query
UNION ALL -- Recursive member 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 for iteration = 1
  • (n+1)! = n! * (iteration+1) for 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...