遞迴cte是sql server 2005中重要的增強之一。一般我們在處理樹,圖和層次結構的問題時需要用到遞迴查詢。
cte的語法如下
1with
cte as2
(3select
empid, reportto, fname
from
employ
where
empid=1
4union
all5
select
emp.empid, emp.reportto, emp.fname
from
cte
join
employ
asemp
oncte.empid
=emp.reportto6)
遞迴cte最少包含兩個查詢(也被稱為成員)。第乙個查詢為定點成員,定點成員只是乙個返回有效表的查詢,用於遞迴的基礎或定位點。第二個查詢被稱為遞迴成員,使該查詢稱為遞迴成員的是對cte名稱的遞迴引用是觸發。在邏輯上可以將cte名稱的內部應用理解為前乙個查詢的結果集。
遞迴查詢沒有顯式的遞迴終止條件,只有當第二個遞迴查詢返回空結果集或是超出了遞迴次數的最大限制時才停止遞迴。是指遞迴次數上限的方法是使用maxrecurion。
1use
adventureworks;2go
3--creates an infinite loop
4with
cte (employeeid, managerid, title) as5
(6select
employeeid, managerid, title
7from
humanresources.employee
8where
managerid
isnot
null
9union
all10
select
cte.employeeid, cte.managerid, cte.title
11from
cte
12join
humanresources.employee
ase
13on
cte.managerid
=e.employeeid14)
15--
uses maxrecursion to limit the recursive levels to 2
16select
employeeid, managerid, title
17from
cte18
option
(maxrecursion 2);
19go
原 SQL Server中使用CTE遞迴查詢
目錄 背景 問題思路 ctecte遞迴查詢 結束語參考資料 怎麼遍歷出乙個父級選單下所有子選單?思路 定義語法結構 使用cte準則 示例 定義 cte common table expressions 是從sql server 2005以後版本才有的。指定的臨時命名結果集,這些結果集稱為cte。與派...
sql server利用cte遞迴查詢
with cte id,name,parent id as select id,name,parent id from sc district where name 巴中市 union all select sd.id,sd.name,sd.parent id from sc district sd...
Sqlserver普通的CTE遞迴示例
建立表 declare t table id int pid int name varchar 6 insert into t select 1,0,上衣 union all select 2,0,鞋子 union all select 3,0,褲子 union all select 4,1,毛衣 ...