2016-12-02 37 views
-1

我想申請頁面或限制CTE的記錄,但不是在它的方式,一般建議這樣SQL - 尋呼遞歸CTE而不是在傳統的方式

;WITH children AS 
(
    SELECT Item, Parent 
    FROM #TempHeirarchy 
    UNION ALL 
    SELECT e.Item, e.Parent 
    FROM #TempHeirarchy e 
    INNER JOIN children e2 
     ON e.Parent = e2.Item 
) 
select * into #TempFinal 
from (select row_number() over(order by parent asc) as RowNumber, * from children) t 
where t.RowNumber between 1 and 10 

但這種方式是先申請遞歸到所有記錄,然後應用分頁,因此即使我僅獲取10條記錄,也需要很長時間才能完成此操作。

是不是有什麼辦法,我可以完全停止遞歸時CTE解析的記錄數達到10個記錄?

如果這是不可能的,那麼有沒有任何其他方式在那裏我可以生成家長兒童的數據,當它到達頁面大小停止?

+1

我沒有看到第一個選擇的位置或過濾條件。 –

+0

我沒有任何條件。如果我在第一個查詢本身限制記錄,它不會獲取實際水平 –

+1

那麼如何確定每個組的最頂級父項?根據定義,層次結構有一個起點。 – xQbert

回答

1

生成你自己的遞歸查詢櫃檯,停止一次算他10

此外,它似乎你已經不侷限於你的初始值非常好。你需要從某個地方開始。

;WITH children AS 
(
    SELECT Item, Parent, 0 as cnt 
    FROM #TempHeirarchy 
    WHERE parent is null --? Missing starting value 
    UNION ALL 
    SELECT e.Item, e.Parent, cnt+1 
    FROM #TempHeirarchy e 
    INNER JOIN children e2 
     ON e.Parent = e2.Item 
    WHERE cnt < 10 
) 
select * into #TempFinal 
from children 
+0

不應該從'1'開始或者檢查'cnt <10'? –

+0

haha​​ha(ID10T錯誤) – xQbert

1

是這樣的嗎?

;WITH children AS 
(
    SELECT Item, Parent, 1 as Level 
    FROM #TempHeirarchy 
    UNION ALL 
    SELECT e.Item, e.Parent, Level+1 as Level 
    FROM #TempHeirarchy e 
    INNER JOIN children e2 
     ON e.Parent = e2.Item 
    WHERE Level <= 10 
) 
+0

這不會限制樹的深度嗎?我正在談論記錄的數量。 –

+0

然後顯示我們的樣本數據和預期結果;) –

+0

AFAIK這將限制爲10條記錄返回;但沒有一個誰知道這些將會是什麼記錄的起點。 – xQbert