Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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
Hierarchyid (Transact-SQL)