2015-03-19 2 views
0

Скажем, у меня есть следующее иерархическое представление в моей базе данных:Как получить дочерние узлы из родительского узла из таблицы в SQL?

A 
|_B_C 
|_D 

, то я хочу, чтобы получить дочерние узлы из A (или B). и наоборот, я хочу получить родительский элемент из заданного дочернего узла? <>

CREATE TABLE tbl (
    Node HierarchyID PRIMARY KEY CLUSTERED, 
    NodeLevel AS Node.GetLevel(), 
    ID INT UNIQUE NOT NULL, 
    Name VARCHAR(50) NOT NULL 
) 

вставив корень:

INSERT INTO tbl (Node, ID, Name) 
    VALUES (HierarchyId::GetRoot(), 1, 'A') 

ребенок B

DECLARE @parent HierarchyId = HierarchyId::GetRoot() 
INSERT INTO tbl (Node,ID,Name) VALUES (@parent.GetDescendant(NULL,NULL),2,'B') 
+0

определения Таблица, примеры данных и требуемые результаты помогут. – Laurence

+0

Я добавил их ... –

ответ

0
select @child = node from tbl where id = 2; 
-- get immediate ancestor 
select * from dbo.tbl where Node = @child.GetAncestor(1); 

-- get immediate children 
select 
    * 
from 
    dbo.tbl 
where 
    Node.IsDescendantOf(@parent) = 1 and 
    Node.GetLevel() = @parent.GetLevel() + 1; 
Смежные вопросы