私はテーブルを持っている:私が欲しいもの再帰クエリを正しく作成する方法は?
ItemID ParentID ItemName
0 NULL England
50 0 Hampshire county
401 50 Southampton
402 50 Portsmouth
は次の表です:
ItemID Level ItemName ItemPath
0 0 England England
50 1 Hampshire county England\HampshireCounty
401 2 Southampton England\HampshireCounty\Southampton
402 2 Portsmouth England\HampshireCounty\Portsmouth
私は次のクエリ作成しました:
WITH tree (A_ItemName, A_ItemId, A_Level, pathstr)
AS (SELECT ItemName, ItemId, 0,
CAST('' AS VARCHAR(MAX))
FROM Items
WHERE ParentID IS NULL
UNION ALL
SELECT ItemName, ItemID, t.A_Level + 1, t.pathstr + '/' + V.ItemName
FROM Items V
INNER JOIN tree t
ON t.A_ItemId = V.ItemID)
SELECT SPACE(A_Level) + A_ItemName as A_ItemName, A_ItemId, A_Level, pathstr
FROM tree
ORDER BY pathstr, A_ItemId
は、しかし、私は持っているがエラー:
The statement terminated. The maximum recursion 100 has been exhausted before statement completion.
私は間違って何を考えている?
'option(MaxRecursion 0) 'を追加してください。 –
ON t.A_ItemId = V.ItemID ?? – Serg
ゴードン・リノフの修正で 'CAST( 'AS VARCHAR(MAX))'を 'CAST(ItemName AS VARCHAR(MAX))'に変更 – Hamawi