0
我有兩個存儲過程。第一個存儲過程返回頂級父項,第二個過程將返回提供的父ID的子項。每個孩子也可能是父母。使用存儲過程的SQL遞歸
在研究CTE時遇到的問題是,每個示例似乎都依賴於ID + 1,由於該項目的ID不是順序的,因此在此不起作用。任何指導在這裏將不勝感激。
我有兩個存儲過程。第一個存儲過程返回頂級父項,第二個過程將返回提供的父ID的子項。每個孩子也可能是父母。使用存儲過程的SQL遞歸
在研究CTE時遇到的問題是,每個示例似乎都依賴於ID + 1,由於該項目的ID不是順序的,因此在此不起作用。任何指導在這裏將不勝感激。
下面是一個快速的CTE示例,展示瞭如何確定查詢的深度。完整的SQL小提琴是在這裏:http://www.sqlfiddle.com/#!6/5c3f47/1/0
WITH CTE AS (
SELECT
Records.Id,
Records.Name,
Records.ParentId,
CONVERT(INT, 1) AS Depth
FROM dbo.Records Records
WHERE Records.ParentId IS NULL
UNION ALL
SELECT
Records.Id,
Records.Name,
Records.ParentId,
CTE.Depth + 1
FROM CTE
INNER JOIN dbo.Records Records
ON CTE.Id = Records.ParentId
)
SELECT * FROM CTE
這對於該示例產生下面的輸出:
| ID | NAME | PARENTID | DEPTH |
|----|-------|----------|-------|
| 1 | A | (null) | 1 |
| 2 | B | (null) | 1 |
| 5 | B.1 | 2 | 2 |
| 3 | A.1 | 1 | 2 |
| 4 | A.2 | 1 | 2 |
| 6 | A.1.1 | 3 | 3 |
| 7 | A.1.2 | 3 | 3 |
好吧,我不能確定從哪裏開始。我知道這個問題需要遞歸,但是CTE上的所有示例都可以找到需要某種形式的順序標識,這些標識可以遞增或遞減以獲得下一個數據,這在這裏不起作用。 – Adola 2014-11-14 19:35:25
從實際陳述您的問題開始,向我們顯示您的查詢和您的錯誤 – 2014-11-14 19:38:44
您能否提供一些ID示例?數據庫中的關係如何維護?表格是否有父列和子列? – Michael 2014-11-14 20:22:55