Megosztás a következőn keresztül:


GetDescendant (adatbázismotor)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A szülő gyermekcsomópontját adja vissza.

Syntax

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

Arguments

child1
NULL vagy az aktuális csomópont gyermekének hierarchiaazonosítója.

child2
NULL vagy az aktuális csomópont gyermekének hierarchiaazonosítója.

Visszatérési típusok

SQL Server visszatérési típusa:hierarchiaazonosító

CLR visszatérési típusa:SqlHierarchyId

Remarks

Egy gyermekcsomópontot ad vissza, amely a szülő leszármazottja.

  • Ha a szülő NULL, akkor null értéket ad vissza.
  • Ha a szülő nem NULL, és a gyermek1 és a gyermek2 is NULL, akkor a szülő gyermekét adja vissza.
  • Ha a szülő és a gyermek1 nem NULL, és a gyermek2 értéke NULL, akkor a gyermek1-nél nagyobb szülő gyermekét adja vissza.
  • Ha a szülő és a gyermek2 nem NULL, és a gyermek1 null értékű, a gyermek2-nél kisebb szülő gyermekét adja vissza.
  • Ha a szülő, a gyermek1 és a gyermek2 nem NULL értékű, a gyermek1-nél nagyobb és a gyermek2-nél kisebb szülő gyermekét adja vissza.
  • Ha a gyermek1 nem NULL értékű, és nem szülő gyermeke, kivétel keletkezik.
  • Ha a gyermek2 nem NULL értékű, és nem szülő gyermeke, kivétel keletkezik.
  • Ha a gyermek1 >= gyermek2, kivétel keletkezik.

A GetDescendant determinisztikus. Ezért ha a GetDescendant meghívása ugyanazokkal a bemenetekkel történik, mindig ugyanazt a kimenetet fogja eredményezni. A létrehozott gyermek pontos identitása azonban a többi csomóponthoz való viszonyától függően változhat, ahogy a C példában is látható.

Examples

A. Sor beszúrása a legkevésbé leszármazó csomópontként

A rendszer új alkalmazottat alkalmaz, és jelentést készít egy meglévő alkalmazottnak a csomópont /3/1/. Hajtsa végre a következő kódot az új sor beszúrásához a GetDescendant metódussal argumentumok nélkül az új sorcsomópont /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. Sor beszúrása nagyobb leszármazott csomópontként

A rendszer egy másik új alkalmazottat vesz fel, és ugyanazt a vezetőt jelenti, mint az A példában. Hajtsa végre a következő kódot az új sor beszúrásához a GetDescendant metódussal az 1. gyermek argumentum használatával annak meghatározásához, hogy az új sor csomópontja az A példában követi a csomópontot, és /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. Sor beszúrása két meglévő csomópont között

A rendszer egy harmadik alkalmazottat alkalmaz, és ugyanazt a vezetőt jelenti, mint az A példában. Ez a példa beszúrja az új sort egy olyan csomópontra, amely nagyobb, mint az A példában szereplő FirstNewEmployee, és kisebb, mint a B példában szereplő SecondNewEmployee. Hajtsa végre a következő kódot a GetDescendant metódussal. A child1 és a child2 argumentum használatával is megadhatja, hogy az új sor csomópontja csomóponttá váljon /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') ;  
  

Az A, B és C példák elvégzése után a táblához hozzáadott csomópontok a következő hierarchiaazonosítóval értékekkel lesznek társítva:

/3/1/1/

/3/1/1.1/

/3/1/2/

A csomópont /3/1/1.1/ nagyobb, mint a csomópont /3/1/1/, de a hierarchia azonos szintjén.

D. Skalár példák

Az SQL Server támogatja a hierarchiaazonosító csomópontok tetszőleges beszúrását és törlését. A GetDescendant() használatával bármikor létrehozhat csomópontot bármely két hierarchiaazonosító csomópont között. Hajtsa végre a következő kódot a mintacsomópontok GetDescendanthasználatával történő létrehozásához:

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. CLR példa

A következő kódrészlet meghívja a GetDescendant() metódust:

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());  

Lásd még

hierarchiaazonosító adattípus-metódus referencia-
hierarchikus adatok (SQL Server)
Hierarchyid (Transact-SQL)