Vamos a suponer por mi ejemplo, que su mesa es algo como lo siguiente:
DECLARE TABLE MyTable
(
HID hierarchyid PRIMARY KEY,
ID int IDENTITY(1, 1),
SomeText varchar(50)
);
Si desea que todos los descendientes de un nodo con el ID 3, hasta un nivel máximo (de raíz) de 5:
DECLARE @searchNode hierarchyid;
SELECT @searchNode = HID
FROM MyTable
WHERE ID = 3;
SELECT *
FROM MyTable
WHERE HID.IsDescendantOf(@searchNode)
AND HID.GetLevel() <= 5;
Si en Stead desea 2 niveles de los niños bajo el nodo solicitado que se necesita para capturar el nivel de su nodo de búsqueda en la primera seleccionar y cambiar la comparación con algo como
WHERE HID.IsDescendantOf(@searchNode) = 1
AND HID.GetLevel() <= (@searchLevel + 2);
Marc - ¿Cómo se pueden limitar los descendientes a niveles de profundidad X? – IEnumerator
@IEnumerator - puede usar 'col.GetLevel()' y agregarlo a la cláusula where – BornToCode