Я буду считать для моего примера, что ваш стол что-то вроде следующего:
DECLARE TABLE MyTable
(
HID hierarchyid PRIMARY KEY,
ID int IDENTITY(1, 1),
SomeText varchar(50)
);
Если вы хотите, чтобы все decendants из узла с 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);
Marc - Как вы можете ограничить потомков до X уровней? – IEnumerator
@IEnumerator - вы можете использовать 'col.GetLevel()' и добавить его в предложение where – BornToCode