程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2005使用關系數據庫存儲CFG

SQL Server 2005使用關系數據庫存儲CFG

編輯:關於SqlServer

本文介紹的是用關系數據庫來存儲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 的結果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved