簡體   English   中英

如何遍歷Sql Server 2005存儲的proc中的分層數據?

[英]How do I iterate through hierarchical data in a Sql Server 2005 stored proc?

我有一個類似於以下內容的SqlServer2005表“ Group”:

Id (PK, int)
Name (varchar(50))
ParentId (int)

其中,ParentId引用了Group表中的另一個ID。 這用於建模分層組,例如:

Group 1 (id = 1, parentid = null)
    +--Group 2 (id = 2, parentid = 1)
    +--Group 3 (id = 3, parentid = 1)
           +--Group 4 (id = 4, parentid = 3)
Group 5 (id = 5, parentid = null)
    +--Group 6 (id = 6, parentid = 5)

你得到圖片

我有另一個表,為了簡化起見,我們將其稱為“數據”,它看起來像:

Id (PK, int)
Key (varchar)
Value (varchar)
GroupId (FK, int)

現在,我正在嘗試編寫一個存儲的proc,它可以使我獲得給定組的“數據”。 例如,如果我查詢組1,則從groupId = 1的數據中返回鍵-值對。如果我查詢組2,則返回groupId = 1的KVP,然后與具有groupId =的KVP合並。 2(並替換了重復的鍵)。

理想情況下,如果存在周期(例如,如果組1的父級是組2而組2的父級是組1),則存儲過程也將正常地失敗。

有沒有人有編寫這樣的程序的經驗,或者知道如何實現?

謝謝大家,非常感謝,

亞歷克斯

這可以使用遞歸查詢和CTE來完成

;WITH KeyValue AS
(
SELECT G.Id, G.Name, D.Key, D.Value, 0 AS level
FROM Group G
LEFT JOIN Data D ON G.Id = D.GroupID
WHERE G.Id = @your_top_level_root

UNION ALL

SELECT G.Id, G.Name, D.Key, D.Value, K.level + 1
FROM KeyValue K
JOIN Group G ON G.ParentId = K.Id
LEFT JOIN Data D ON G.Id = D.GroupID
)
SELECT * FROM KeyValue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM