GetDescendant (aparat bazy danych)
Zwraca węzeł podrzędność obiektu nadrzędnego.
Składnia
-- Transact-SQL syntax
parent.GetDescendant ( child1 , child2 )
-- CLR syntax
SqlHierarchyId GetDescendant ( SqlHierarchyId child1 , SqlHierarchyId child2 )
Argumenty
child1
Wartość NULL lub hierarchyid podrzędność bieżącego węzła.child2
Wartość NULL lub hierarchyid podrzędność bieżącego węzła.
Zwracane typy
**SQL Zwracany typ serwera:**hierarchyid
**Zwracany typ CLR:**SqlHierarchyId
Uwagi
Zwraca jeden węzeł podrzędność , który jest obiektem podrzędnym obiektu nadrzędnego.
Jeśli nadrzędny ma wartość NULL, zwraca wartość NULL.
Jeżeli element nadrzędny nie jest NULL, a child1 i child2 mają wartości NULL, zwraca podrzędność elementu nadrzędnego.
Jeśli jednostka dominująca i child1 nie mają wartości NULL i child2 jest NULL, zwraca podrzędność elementu nadrzędnego większa niż child1.
Jeśli jednostka dominująca i child2 nie mają wartości NULL i child1 ma wartość NULL, zwraca podrzędność nadrzędne mniej niż child2.
Jeśli nadrzędny, child1 i child2 nie mają wartości NULL, zwraca podrzędność elementu nadrzędnego, większa child1 i mniejsza niż child2.
Jeśli child1 nie jest wartość NULL, a nie podrzędność obiektu nadrzędnego, wyjątek.
Jeśli child2 nie jest wartość NULL, a nie podrzędność obiektu nadrzędnego, wyjątek.
Jeśli child1 >= child2, spowodował wyjątek.
GetDescendantTo przewidywalne.W związku z tym jeśli GetDescendant jest wywoływana z tych samych nakładów powoduje zawsze wygenerowanie te same dane wyjściowe.Jednak dokładną tożsamości podrzędność produkowane mogą się różnić w zależności od jego związek z innymi węzłami jak pokazano w przykładzie C.
Przykłady
A.Wstawianie wiersza jak najmniej podrzędne węzła
Wynajęte nowego pracownika, zgłoszenie istniejącym pracownikiem w węźle /3/1/.Wykonać następujący kod, aby wstawić nowy wiersz za pomocą GetDescendant metoda bez argumentów pozwala określić nowy węzeł wierszy 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 wiersza jako większa węzła podrzędnego
Wynajęte innego pracownika nowe zgłoszenie tego samego menedżera, jak w przykładzie A.Wykonać następujący kod, aby wstawić nowy wiersz za pomocą GetDescendant metoda przy użyciu argumentu podrzędność 1, aby określić, że węzeł 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
Zatrudniony pracownik trzeciego zgłoszenie 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, a mniej niż SecondNewEmployee w przykładzie B.Wykonanie następującego kodu za pomocą GetDescendant metoda.Umożliwia określanie, węźle nowy wiersz, stanie się węzeł child1 argument 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 dodane do tabela będzie równorzędne 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ększa niż węzeł /3/1/1/ , ale na tym samym poziom w hierarchii.
D.Przykłady skalarne
SQL Serverobsługuje dowolnego wstawienia i usunięcia wszelkich hierarchyid węzłów. Za pomocą GetDescendant(), jest zawsze można wygenerować węzła między dwoma dowolnym hierarchyid węzłów.Wykonać następujący kod do generowania węzłów próbki 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ła urywek 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());