本文介紹的是用關聯式資料庫來儲存CFG(控制流程程圖)的資訊。在查詢時,為了得到所有dominate關係的結果,使用了CTE來進行遞迴查詢。
本文介紹的是用關聯式資料庫來儲存CFG(控制流程程圖)的資訊。在查詢時,為了得到所有dominate關係的結果,使用了CTE來進行遞迴查詢。
簡單例子如下:
1. 現有表testRe結構如下
2. 欲得到的查詢結果為找到id='a'的項的所有pId,即b、c、d。
3. 使用CTE做遞迴查詢:
WITH Re_CTE(id, pId, Level)Technorati 標籤: sql server,CTE,遞迴,查詢AS ( SELECT id, pId, 1 AS [Level] FROM testRe WHERE id='a' UNION ALL SELECT t.id, t.pId, [Level] + 1 FROM testRe t INNER JOIN Re_CTE ct ON t.id=ct.pId ) SELECT * FROM Re_CTE
其中,Level為可選項
4. 查詢結果為:
5. CTE的簡單說明(參考MSDNhttp://msdn.microsoft.com/zh-cn/library/ms186243%28SQL.90%29.ASPx):
WITH cte_name(column_name [,...n]) AS ( CTE_query_definition –- Anchor member is defined. UNION ALL CTE_query_definition –- Recursive member is defined referencing cte_name. ) -- Statement using the CTE SELECT * FROM cte_name
一個遞迴 CTE 結構必須至少包含一個錨點成員和一個遞迴成員。
執行時:
將 CTE 運算式拆分為錨點成員和遞迴成員。
運行錨點成員,建立第一個調用或基準結果集 (T0)。
運行遞迴成員,將 Ti 作為輸入,將 Ti+1 作為輸出。
重複步驟 3,直到返回空集。
返回結果集。這是對 T0 到 Tn 執行 UNION ALL 的結果。