Truy vấn phân cấp và đệ quy trong SQL Server
Jasmin Ludolf
Content Developer
Gồm 4 phần:
WITH cte_name AS (-- Anchor member initial_queryUNION ALL -- Recursive member recursive_query termination_condition )SELECT * FROM cte_name
Nếu cần hơn 100 bước đệ quy, tăng giới hạn bước:
OPTION(MAXRECURSION 32767)Không cho phép các lệnh: GROUP BY, HAVING, LEFT JOIN, RIGHT JOIN, OUTER JOIN, SELECT DISTINCT, Subqueries,TOP
Số cột của anchor và recursive member phải bằng nhau
Kiểu dữ liệu của anchor và recursive member phải giống nhau
Tính giai thừa:
Giai thừa của
nlà tích của các số nguyên dương ≤n:
3! = 1 x 2 x 3 = 6
Giai thừa n! được định nghĩa đệ quy như sau:
0! = 1 khi iteration = 1(n+1)! = n! * (iteration+1) khi 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
Truy vấn phân cấp và đệ quy trong SQL Server