Delen via


GetDescendant (database-engine)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Retourneert een onderliggend knooppunt van het bovenliggende item.

Syntax

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

Arguments

child1
NULL of de hiërarchie-id van een onderliggend element van het huidige knooppunt.

child2
NULL of de hiërarchie-id van een onderliggend element van het huidige knooppunt.

Retourtypen

sql Server-retourtype: hierarchyid-

CLR-retourtype: SqlHierarchyId

Remarks

Retourneert één onderliggend knooppunt dat een afstammeling is van het bovenliggende knooppunt.

  • Als bovenliggend item NULL is, wordt NULL geretourneerd.
  • Als bovenliggend item niet NULL is en zowel onderliggende1 als onderliggende 2 NULL zijn, retourneert u een onderliggend element van het bovenliggende item.
  • Als bovenliggende en onderliggende1 niet NULL zijn en onderliggend 2 NULL is, wordt een onderliggend element van bovenliggend item geretourneerd dat groter is dan onderliggend item1.
  • Als bovenliggend en onderliggend item niet NULL zijn en onderliggende1 NULL is, wordt een onderliggend element van bovenliggend item kleiner dan onderliggend item2 geretourneerd.
  • Als bovenliggende, onderliggende1 en onderliggende2 niet NULL zijn, wordt een onderliggend item geretourneerd dat groter is dan onderliggend item1 en kleiner dan onderliggende2.
  • Als child1 niet NULL is en geen onderliggend element van bovenliggend item, wordt er een uitzondering gegenereerd.
  • Als child2 niet NULL is en geen onderliggend element van bovenliggend item, wordt er een uitzondering gegenereerd.
  • Als child1 >= child2, wordt er een uitzondering gegenereerd.

GetDescendant is deterministisch. Als GetDescendant daarom wordt aangeroepen met dezelfde invoer, wordt altijd dezelfde uitvoer geproduceerd. De exacte identiteit van het geproduceerde kind kan echter variëren, afhankelijk van de relatie met de andere knooppunten, zoals wordt weergegeven in voorbeeld C.

Examples

A. Een rij invoegen als het minst onderliggende knooppunt

Een nieuwe werknemer wordt aangenomen en rapporteert aan een bestaande werknemer op knooppunt /3/1/. Voer de volgende code uit om de nieuwe rij in te voegen met behulp van de GetDescendant-methode zonder argumenten om het nieuwe rijknooppunt op te geven als /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. Een rij invoegen als een groter afstammelingsknooppunt

Een andere nieuwe werknemer wordt ingehuurd en rapporteert aan dezelfde manager als in voorbeeld A. Voer de volgende code uit om de nieuwe rij in te voegen met behulp van de methode GetDescendant met behulp van het argument onderliggend 1 om op te geven dat het knooppunt van de nieuwe rij het knooppunt in voorbeeld A volgt. Dit wordt /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. Een rij invoegen tussen twee bestaande knooppunten

Een derde werknemer wordt ingehuurd en rapporteert aan dezelfde manager als in voorbeeld A. In dit voorbeeld wordt de nieuwe rij ingevoegd in een knooppunt dat groter is dan de FirstNewEmployee in voorbeeld A en kleiner is dan de SecondNewEmployee in voorbeeld B. Voer de volgende code uit met behulp van de methode GetDescendant. Gebruik zowel het argument child1 als het onderliggende2-argument om op te geven dat het knooppunt van de nieuwe rij knooppunt wordt /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') ;  
  

Nadat u voorbeelden A, B en C hebt voltooid, worden de knooppunten die aan de tabel zijn toegevoegd, gekoppeld aan de volgende hiërarchie-id waarden:

/3/1/1/

/3/1/1.1/

/3/1/2/

Knooppunt /3/1/1.1/ groter is dan knooppunt /3/1/1/, maar op hetzelfde niveau in de hiërarchie.

D. Scalaire voorbeelden

SQL Server biedt ondersteuning voor willekeurige invoegingen en verwijderingen van hiërarchie-id knooppunten. Met Behulp van GetDescendant() is het altijd mogelijk om een knooppunt te genereren tussen twee hiërarchie-id knooppunten. Voer de volgende code uit om voorbeeldknooppunten te genereren met behulp van 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. CLR-voorbeeld

Met het volgende codefragment wordt de methode GetDescendant() aangeroepen:

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

Zie ook

gegevenstype van de hiërarchie-id
Hierarchical Data (SQL Server)
Hierarchyid (Transact-SQL)