Как ограничить глубину рекурсии CTE, но выбрать общую таблицу?

В настоящее время у нас есть хранимая процедура, которая возвращает данные из таблицы в ее исходной схеме, выполняя что-то вроде этого:

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

Это хорошо, потому что независимо от того, как изменяется схема таблицы, пока есть столбцы [Id] и [ParentId], мне не нужно будет обновлять эту хранимую процедуру. Я хотел бы сделать нечто подобное, но также иметь возможность динамически определять глубину рекурсии. Единственный способ сделать это - добавить идентификатор уровня / глубины примерно так:

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

Это работает хорошо, но убирает главный плюс предыдущего запроса с момента выбора* в конце даст мне уровень, а также. Есть ли какой-то другой способ сделать это, где я мог бы указать уровень, а также выбрать все столбцы из таблицы? Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос