Jelenleg van egy tárolt eljárásunk, amely az eredeti sémájában lévő táblából ad vissza adatokat a következőképpen:
WITH CTE AS
(
-- Start CTE off by selecting the id that was provided to stored procedure.
SELECT *
FROM [dbo].[TestTable]
WHERE [Id] = 1
-- Recursively add tasks that are children of records already found in previous iterations.
UNION ALL
SELECT t.*
FROM [dbo].[TestTable] as t
INNER JOIN CTE as tcte
ON t.[ParentId] = tcte.[Id]
)
SELECT *
FROM CTE
Ez jó, mert bárhogy is változik a táblaséma, amíg vannak [Id] és [ParentId] oszlopok, nem kell frissítenem ezt a tárolt eljárást. Valami hasonlót szeretnék csinálni, de a rekurzió mélységét is dinamikusan tudnám megadni. Az egyetlen módja annak, hogy ezt megtegyem, egy szint/mélység azonosító hozzáadása, például:
WITH CTE AS
(
-- Start CTE off by selecting the task that was provided to stored procedure.
SELECT *, 0 as [Level]
FROM [dbo].[TestTable]
WHERE [Id] = 1
-- Recursively add tasks that are children of parent tasks that have already been found in previous iterations.
UNION ALL
SELECT t.*, [Level] + 1
FROM [dbo].[TestTable] as t
INNER JOIN CTE as tcte
ON t.[ParentId] = tcte.[Id]
WHERE [Level] < 2
)
SELECT *
FROM CTE
Ez jól működik, de elveszi az előző lekérdezés fő előnyét, mivel a *
kiválasztása a végén megadja a szintet is. Van valami más módja ennek, ahol megadhatok egy szintet, de általánosan ki is jelölhetem az összes oszlopot a táblázatból? Előre is köszönöm.