Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Returnerar en underordnad nod till den överordnade noden.
Syntax
-- Transact-SQL syntax
parent.GetDescendant ( child1 , child2 )
-- CLR syntax
SqlHierarchyId GetDescendant ( SqlHierarchyId child1 , SqlHierarchyId child2 )
Arguments
child1
NULL eller hierarchyid för en underordnad till den aktuella noden.
child2
NULL eller hierarchyid för en underordnad till den aktuella noden.
Returtyper
SQL Server-returtyp:hierarchyid
CLR-returtyp:SqlHierarchyId
Remarks
Returnerar en underordnad nod som är underordnad den överordnade noden.
- Om det överordnade värdet är NULL returneras NULL.
- Om överordnad inte är NULL, och både child1 och child2 är NULL, returnerar ett underordnat till överordnat.
- Om över- och underordnad1 inte är NULL och underordnad 2 är NULL returnerar ett underordnat överordnat objekt större än underordnat 1.
- Om överordnad och underordnad 2 inte är NULL och child1 är NULL returnerar ett underordnat underordnat objekt än underordnat 2.
- Om överordnad, underordnad 1 och underordnad2 inte är NULL returnerar ett underordnat överordnat barn större än underordnat 1 och mindre än underordnat 2.
- Om child1 inte är NULL och inte ett underordnat till överordnat värde genereras ett undantag.
- Om child2 inte är NULL och inte ett underordnat till överordnat, genereras ett undantag.
- Om child1 >= child2 utlöses ett undantag.
GetDescendant är deterministiskt. Om GetDescendant anropas med samma indata genereras därför alltid samma utdata. Den exakta identiteten för det underordnad som skapas kan dock variera beroende på dess relation till de andra noderna, vilket visas i exempel C.
Examples
A. Infoga en rad som den minst underordnade noden
En ny anställd anställs och rapporterar till en befintlig anställd på noden /3/1/. Kör följande kod för att infoga den nya raden med metoden GetDescendant utan argument för att ange den nya radnoden som /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. Infoga en rad som en större underordnad nod
En annan ny anställd anställs och rapporterar till samma chef som i exempel A. Kör följande kod för att infoga den nya raden med hjälp av metoden GetDescendant med hjälp av argumentet child 1 för att ange att noden på den nya raden ska följa noden i exempel A och bli /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. Infoga en rad mellan två befintliga noder
En tredje anställd anställs och rapporterar till samma chef som i exempel A. Det här exemplet infogar den nya raden till en nod som är större än FirstNewEmployee i exempel A och mindre än SecondNewEmployee i exempel B. Kör följande kod med metoden GetDescendant. Använd både argumentet child1 och child2 för att ange att noden för den nya raden ska bli nod /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') ;
När du har slutfört exemplen A, B och C är noderna som läggs till i tabellen peer-datorer med följande hierarchyid värden:
/3/1/1/
/3/1/1.1/
/3/1/2/
Nod /3/1/1.1/ är större än nod /3/1/1/ men på samma nivå i hierarkin.
D. Skalära exempel
SQL Server stöder godtyckliga infogningar och borttagningar av alla hierarkiid noder. Genom att använda GetDescendant() är det alltid möjligt att generera en nod mellan två hierarchyid noder. Kör följande kod för att generera exempelnoder med hjälp av 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-exempel
Följande kodfragment anropar metoden 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());
Se även
hierarchyid-datatypsmetodreferens
(Hierarchical Data)
hierarki (Transact-SQL)