Udostępnij za pośrednictwem


GetDescendant (Database Engine)

Zwraca węzeł podrzędność obiektu nadrzędnego.

-- Transact-SQL syntax
parent.GetDescendant ( child1 , child2 ) 

-- CLR syntax
SqlHierarchyId GetDescendant ( SqlHierarchyId child1 , SqlHierarchyId child2 ) 

Argumenty

  • child1
    Wartość NULL lub hierarchyid z elementem podrzędnym bieżącego węzła.

  • child2
    Wartość NULL lub hierarchyid z elementem podrzędnym bieżącego węzła.

Zwracane typy

**Zwracany typ programu SQL Server:**hierarchyid

**Zwracany typ CLR:**SqlHierarchyId

Remarks

Zwraca jeden węzeł podrzędność, który jest obiektu podrzędnego obiektu nadrzędnego.

  • Jeśli nadrzędny ma wartość NULL, zwraca wartość NULL.

  • Jeśli element nadrzędny nie jest NULL, a child1 i child2 są wartości NULL, zwraca element podrzędność obiektu nadrzędnego.

  • Jeśli nadrzędny i child1 nie jest NULL, a child2 ma wartość NULL, zwraca większe niż child1 element podrzędność obiektu nadrzędnego.

  • Jeśli nadrzędny i child2 nie są wartości NULL i child1 ma wartość NULL, zwraca element podrzędność obiektu nadrzędnego mniej niż child2.

  • Jeśli nadrzędny i child1 child2 nie są wartości NULL, zwraca element podrzędność obiektu nadrzędnego, większa child1 i mniejsza niż child2.

  • Jeśli child1 nie jest NULL, a nie element podrzędność obiektu nadrzędnego, jest spowodował wyjątek.

  • Jeśli child2 nie jest NULL, a nie element podrzędność obiektu nadrzędnego, jest spowodował wyjątek.

  • Jeśli child1 >= child2, powstaje wyjątek.

GetDescendant jest deterministyczny.Dlatego jeśli GetDescendant nazywa się z tych samych danych wejściowych, to zawsze da te same dane wyjściowe. Jednak dokładnie tożsamości podrzędność produkowane może zależeć od tego, jego relacji do innych węzłów, jak pokazano w przykładzie C.

Przykłady

A.Wstawianie wiersza co najmniej podrzędne węzła

Zatrudniony nowego pracownika raportowania z pracownikiem istniejących w węźle /3/1/. wykonać następujący kod do wstawienia nowego wiersza przy użyciu GetDescendant Metoda bez argumentów pozwala określić nowy węzeł wiersze jako /3/1/1/:

DECLARE @Manager hierarchyid 
SELECT @Manager = CAST('/3/1/' AS hierarchyid)

INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)
VALUES
(@Manager.GetDescendant(NULL, NULL),
'adventure-works\FirstNewEmployee', 'Application Intern', '3/11/07') ;

B.Wstawianie wierszy jako większa podrzędne węzła

Zatrudniony innego pracownika nowe zgłoszenie do tego samego menedżera, jak w przykładzie A.wykonać następujący kod do wstawienia nowego wiersza przy użyciu GetDescendant Metoda, za pomocą argumentu podrzędność 1, aby określić, że w węźle nowego wiersza są zgodne z węzła w przykładzie A, stając się /3/1/2/:

DECLARE @Manager hierarchyid, @Child1 hierarchyid

SELECT @Manager = CAST('/3/1/' AS hierarchyid)
SELECT @Child1 = CAST('/3/1/1/' AS hierarchyid)

INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)
VALUES
(@Manager.GetDescendant(@Child1, NULL),
'adventure-works\SecondNewEmployee', 'Application Intern', '3/11/07') ;

C.Wstawianie wiersza między dwoma węzłami istniejących

Zatrudnienia pracownika trzeciego zgłoszenie do tego samego menedżera, jak w przykładzie A.W tym przykładzie Wstawia nowy wiersz do węzła większe niż FirstNewEmployee w przykładzie A oraz mniej niż SecondNewEmployee w przykładzie B. wykonać poniższego kodu za pomocą GetDescendant Metoda. Umożliwia określenie, że stanie się w węźle nowy wiersz węzła zarówno child1 argument, jak i child2 argument /3/1/1.1/:

DECLARE @Manager hierarchyid, @Child1 hierarchyid, @Child2 hierarchyid

SELECT @Manager = CAST('/3/1/' AS hierarchyid)
SELECT @Child1 = CAST('/3/1/1/' AS hierarchyid)
SELECT @Child2 = CAST('/3/1/2/' AS hierarchyid)

INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)
VALUES
(@Manager.GetDescendant(@Child1, @Child2),
'adventure-works\ThirdNewEmployee', 'Application Intern', '3/11/07') ;

Po zakończeniu przykłady A, B i C, węzły dodawane do tabela będzie końcówek, z następującymi hierarchyid wartości:

/3/1/1/

/3/1/1.1/

/3/1/2/

Węzeł /3/1/1.1/ jest większe niż węzła /3/1/1/ Jednak na tym samym poziomie w hierarchii.

D.Przykłady wartość skalarna

SQL Server obsługuje dowolnego wstawienia i usunięcia jakichkolwiek hierarchyid węzły. Za pomocą GetDescendant(), zawsze jest możliwe generowanie węzła między dowolnych dwóch hierarchyid węzły. Wykonaj następujący kod do generowania próbki węzły za pomocą GetDescendant:

DECLARE @h hierarchyid = hierarchyid::GetRoot()
DECLARE @c hierarchyid = @h.GetDescendant(NULL, NULL)
SELECT @c.ToString()
DECLARE @c2 hierarchyid = @h.GetDescendant(@c, NULL)
SELECT @c2.ToString()
SET @c2 = @h.GetDescendant(@c, @c2)
SELECT @c2.ToString()
SET @c = @h.GetDescendant(@c, @c2)
SELECT @c.ToString()
SET @c2 = @h.GetDescendant(@c, @c2)
SELECT @c2.ToString()

E.Przykład CLR

Następujący kod wywołania fragment GetDescendant() Metoda:

SqlHierarchyId parent, child1, child2;
parent = SqlHierarchyId.GetRoot();
child1 = parent.GetDescendant(SqlHierarchyId.Null, SqlHierarchyId.Null);
child2 = parent.GetDescendant(child1, SqlHierarchyId.Null);
Console.Write(parent.GetDescendant(child1, child2).ToString());