Это довольно сложная проблема, если вам нужно учесть любой уровень вложенности.
Одним из решений является «Вложенные множества», которые компенсируют увеличение сложности для вставок, обновлений и удалений, чтобы сделать запросы древовидных структур намного проще / эффективнее.
Смотрите здесь: http://www.codeproject.com/Articles/4155/Improve-hierarchy-performance-using-nested-sets
Если бы вы были настроены таким образом, запрос для извлечения необходимых вам данных был бы что-то вроде
SELECT [Id]
FROM [dbo].[Nodes]
WHERE [LeftExtent] < @CurrentNodeLeftExtent
AND [RightExtent] > @CurrentNodeRightExtent
ORDER BY [LeftExtent]
Если это слишком много, я видел, как люди сохраняют путь как дополнительный столбец в таблице, как список идентификаторов, разделенных запятыми. Очевидно, это также означает, что вам придется позаботиться об их обновлении всякий раз, когда вы вставляете, обновляете или удаляете узлы.