Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Vrátí podřízený uzel nadřazeného objektu.
Syntax
-- Transact-SQL syntax
parent.GetDescendant ( child1 , child2 )
-- CLR syntax
SqlHierarchyId GetDescendant ( SqlHierarchyId child1 , SqlHierarchyId child2 )
Arguments
child1
NULL nebo hierarchyid podřízeného uzlu.
child2
NULL nebo hierarchyid podřízeného uzlu.
Návratové typy
Návratový typ:hierarchyid SQL Serveru
návratový typ CLR:SqlHierarchyId
Remarks
Vrátí jeden podřízený uzel, který je potomkem nadřazeného objektu.
- Pokud je nadřazený hodnota NULL, vrátí hodnotu NULL.
- Pokud nadřazený objekt nemá hodnotu NULL a podřízený1 i podřízený2 má hodnotu NULL, vrátí podřízenou položku nadřazeného objektu.
- Pokud nadřazený a podřízený1 nemá hodnotu NULL a podřízený2 má hodnotu NULL, vrátí podřízenou položku nadřazené položky větší než podřízená1.
- Pokud nadřazené a podřízené 2 nemají hodnotu NULL a podřízený1 má hodnotu NULL, vrátí podřízenou položku nadřazené položky menší než podřízená2.
- Pokud nadřazený, podřízený1 a podřízený2 nemá hodnotu NULL, vrátí podřízenou položku nadřazené položky větší než podřízená1 a menší než podřízená2.
- Pokud podřízená položka1 není NULL a není podřízenou nadřazenou položkou, je vyvolána výjimka.
- Pokud podřízená hodnota2 není NULL a není podřízenou nadřazenou položkou, je vyvolána výjimka.
- Pokud je podřízený1 >= podřízený2, vyvolá se výjimka.
GetDescendant je deterministický. Proto pokud GetDescendant je volána se stejnými vstupy, vždy vytvoří stejný výstup. Přesná identita vytvořeného dítěte se ale může lišit v závislosti na jeho vztahu k ostatním uzlům, jak je znázorněno v příkladu C.
Examples
A. Vložení řádku jako nejmenšího potomka uzlu
Nový zaměstnanec je přijat a hlásí stávajícímu zaměstnanci na uzlu /3/1/. Spuštěním následujícího kódu vložte nový řádek pomocí metody GetDescendant bez argumentů pro zadání nového uzlu řádků jako /3/1/1/:
DECLARE @Manager hierarchyid;
SET @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. Vložení řádku jako většího potomka uzlu
Jiný nový zaměstnanec je přijat, který hlásí stejnému nadřízenýmu jako v příkladu A. Spuštěním následujícího kódu vložte nový řádek pomocí metody GetDescendant pomocí podřízeného 1 argumentu, který určuje, že uzel nového řádku bude následovat za uzlem v příkladu A a stane se /3/1/2/:
DECLARE @Manager hierarchyid, @Child1 hierarchyid;
SET @Manager = CAST('/3/1/' AS hierarchyid);
SET @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. Vložení řádku mezi dva existující uzly
Třetí zaměstnanec je přijat a hlásí se stejnému manažeru jako v příkladu A. Tento příklad vloží nový řádek do uzlu větší než FirstNewEmployee v příkladu A a menší než SecondNewEmployee v příkladu B. Pomocí metody GetDescendant spusťte následující kód. Pomocí argumentu child1 a child2 určete, že uzel nového řádku se stane uzlem /3/1/1.1/:
DECLARE @Manager hierarchyid, @Child1 hierarchyid, @Child2 hierarchyid;
SET @Manager = CAST('/3/1/' AS hierarchyid);
SET @Child1 = CAST('/3/1/1/' AS hierarchyid);
SET @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 dokončení příkladů A, B a C budou uzly přidané do tabulky partnerské vztahy s následujícími id hierarchie hodnotami:
/3/1/1/
/3/1/1.1/
/3/1/2/
/3/1/1.1/ uzlu je větší než /3/1/1/ uzlů, ale na stejné úrovni v hierarchii.
D. Skalární příklady
SQL Server podporuje libovolné vkládání a odstraňování všech hierarchií uzlů. Pomocí metody GetDescendant() je vždy možné vygenerovat uzel mezi libovolnými dvěma hierarchyid uzly. Spuštěním následujícího kódu vygenerujte ukázkové uzly 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. Příklad CLR
Následující fragment kódu volá metodu GetDescendant():
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());
Viz také
referenční metody datového typu hierarchie
hierarchyid (Transact-SQL)