Aracılığıyla paylaş


GetDescendant (Veritabanı Altyapısı)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Üst öğesinin alt düğümünü döndürür.

Syntax

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

Arguments

child1
NULL veya geçerli düğümün alt öğesinin hierarchyid.

child2
NULL veya geçerli düğümün alt öğesinin hierarchyid.

Dönüş Türleri

SQL Server dönüş türü:hierarchyid

CLR dönüş türü:SqlHierarchyId

Remarks

Üst düğümün alt öğesi olan bir alt düğümü döndürür.

  • Üst öğe NULL ise NULL döndürür.
  • Üst öğe NULL değilse ve hem alt1 hem de alt2 NULL ise, üst öğesinin alt öğesini döndürür.
  • Üst öğe ve alt1 NULL değilse ve alt2 NULL ise, child1'den büyük üst öğesinin alt öğesini döndürür.
  • Üst ve alt öğe2 NULL değilse ve alt1 NULL ise, alt öğeden küçük olan alt öğeyi döndürür2.
  • Üst öğe, alt1 ve alt öğe2 NULL değilse, alt öğeden büyük ve alt2'den küçük bir üst öğe döndürür.
  • Child1 NULL değilse ve üst öğesinin alt öğesi değilse, bir özel durum oluşturulur.
  • Alt öğe2 NULL değilse ve üst öğesinin alt öğesi değilse, bir özel durum oluşturulur.
  • Alt1 >= alt2 ise, bir özel durum oluşur.

GetDescendant belirleyicidir. Bu nedenle, GetDescendant aynı girişlerle çağrılırsa, her zaman aynı çıkışı üretir. Ancak, üretilen çocuğun tam kimliği, C örneğinde gösterildiği gibi diğer düğümler ile ilişkisine bağlı olarak değişebilir.

Examples

A. En az alt düğüm olarak satır ekleme

Düğüm /3/1/mevcut bir çalışana raporlaması yapılan yeni bir çalışan işe alınır. Yeni satır düğümünü /3/1/1/olarak belirtmek için bağımsız değişkenler olmadan GetDescendant yöntemini kullanarak yeni satırı eklemek için aşağıdaki kodu yürütebilirsiniz:

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. Daha büyük bir alt düğüm olarak satır ekleme

A örneğindekiyle aynı yöneticiye rapor veren başka bir yeni çalışan işe alındı. Alt 1 bağımsız değişkenini kullanarak GetDescendant yöntemini kullanarak yeni satırı eklemek için aşağıdaki kodu yürüterek yeni satırın düğümünün A örneğindeki düğümü takip edeceğinden /3/1/2/olur:

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. Mevcut iki düğüm arasına satır ekleme

Üçüncü bir çalışan işe alınır ve A örneğindekiyle aynı yöneticiye raporlanır. Bu örnek, yeni satırı A örneğindeki FirstNewEmployee daha büyük ve B örneğindeki SecondNewEmployee küçük bir düğüme ekler. GetDescendant yöntemini kullanarak aşağıdaki kodu yürütebilirsiniz. Yeni satırın düğümünün /3/1/1.1/düğüm olacağını belirtmek için hem alt1 bağımsız değişkenini hem de alt2 bağımsız değişkenini kullanın:

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

A, B ve C örneklerini tamamladıktan sonra, tabloya eklenen düğümler aşağıdaki hierarchyid değerleriyle eşlenir:

/3/1/1/

/3/1/1.1/

/3/1/2/

Düğüm /3/1/1.1/ düğüm /3/1/1/ büyüktür ancak hiyerarşide aynı düzeydedir.

D. Skaler örnekler

SQL Server, hierarchyid düğümlerinin rastgele eklenmesini ve silinmesini destekler. GetDescendant() kullanarak, iki hierarchyid düğümü arasında bir düğüm oluşturmak her zaman mümkündür. GetDescendantkullanarak örnek düğümler oluşturmak için aşağıdaki kodu yürütür:

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 örneği

Aşağıdaki kod parçacığı GetDescendant() yöntemini çağırır:

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

Ayrıca bakınız

hierarchyid Veri Türü Yöntemi Başvurusu
Hiyerarşik Veriler (SQL Server)
Hiyerarşi (Transact-SQL)