Для моего примера я предполагаю, что ваша таблица выглядит примерно так:
DECLARE TABLE MyTable
(
HID hierarchyid PRIMARY KEY,
ID int IDENTITY(1, 1),
SomeText varchar(50)
);
Если вы хотите, чтобы все потомки узла с ID 3, опустились до максимального уровня (от корня) до 5:
DECLARE @searchNode hierarchyid;
SELECT @searchNode = HID
FROM MyTable
WHERE ID = 3;
SELECT *
FROM MyTable
WHERE HID.IsDescendantOf(@searchNode)
AND HID.GetLevel() <= 5;
Если вместо этого вам нужно 2 уровня дочерних элементов под запрошенным узлом, вам нужно будет зафиксировать уровень вашего поискового узла при первом выборе и изменить сравнение на что-то вроде
WHERE HID.IsDescendantOf(@searchNode) = 1
AND HID.GetLevel() <= (@searchLevel + 2);