GetDescendant (veritabanı altyapısı)

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

Sözdizimi

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

-- CLR syntax
SqlHierarchyId GetDescendant ( SqlHierarchyId child1 , SqlHierarchyId child2 ) 

Bağımsız değişkenler

  • child1
    null ya da hierarchyidGeçerli düğümün bir çocuk.

  • child2
    null ya da hierarchyidGeçerli düğümün bir çocuk.

Dönüş Türleri

SQL Server döndürme türü: hierarchyid

clr döndürme türü: SqlHierarchyId

Açıklamalar

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

  • Üst null ise, null döndürür.

  • Üst null olmayan ve null child1 ve alt2 vardır, bir alt döndürür.

  • Üst ve child1 null olmayan ve alt2 null ise, bir alt child1 büyüktür döndürür.

  • Üst ve alt2 null olmayan ve null child1 ise, alt alt2 daha az döndürür.

  • Alt, üst, child1 ve alt2 null olmayan, büyük child1 ve alt2 daha az döndürür.

  • null ve değil bir üst alt Child1 ise, bir özel durum oluşturuldu.

  • null ve değil bir üst alt alt2 ise, bir özel durum oluşturuldu.

  • Eğer child1 >= alt2, bir özel durum oluşturuldu.

GetDescendantdeterministic olur. Bu nedenle, eğer GetDescendantolarak adlandırılan aynı girdi ile bu her zaman aynı çıktıyı üretecektir. Ancak, üretilen çocuk tam kimliğini ilişkisini diğer düğümlere bağlı olarak c. örnekte gösterildiği gibi değişebilir

Örnekler

A.Az alt düğümü olarak bir satır ekleme

Yeni bir çalışanı işe, düğümdeki varolan bir çalışan için raporlama /3/1/. Kullanarak yeni bir satır eklemek için aşağıdaki kodu yürütün GetDescendantyöntemi yeni satırlar düğümü olarak belirtmek için bağımsız değişkenler olmadan /3/1/1/:

DECLARE @Manager hierarchyid 
SELECT @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') ;

DECLARE @Manager hierarchyid 
SELECT @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.Büyük bir alt düğümü olarak bir satır ekleme

Başka bir yeni çalışan işe, örnek a. aynı Manager'da raporlama Kullanarak yeni bir satır eklemek için aşağıdaki kodu yürütün GetDescendantolma, yeni satırın düğüm düğüm örnek a izlemediğini belirtme için çocuk 1 bağımsız değişkenini kullanarak yöntemi /3/1/2/:

DECLARE @Manager hierarchyid, @Child1 hierarchyid

SELECT @Manager = CAST('/3/1/' AS hierarchyid)
SELECT @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') ;

DECLARE @Manager hierarchyid, @Child1 hierarchyid

SELECT @Manager = CAST('/3/1/' AS hierarchyid)
SELECT @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.Varolan iki düğüm arasında bir satır ekleme

Üçüncü bir çalışanı işe, örnek a. aynı Manager'da raporlama Bu örnek, bir düğüm daha büyük yeni satır ekler FirstNewEmployeeörnekte a ve daha az SecondNewEmployeeÖrnek b. Aşağıdaki kodu kullanarak yürütmek GetDescendantyöntemi. Yeni satırın düğüm düğüm haline geleceğini belirlemek için child1 bağımsız ve alt2 bağımsız değişken kullanmak /3/1/1.1/:

DECLARE @Manager hierarchyid, @Child1 hierarchyid, @Child2 hierarchyid

SELECT @Manager = CAST('/3/1/' AS hierarchyid)
SELECT @Child1 = CAST('/3/1/1/' AS hierarchyid)
SELECT @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') ;

DECLARE @Manager hierarchyid, @Child1 hierarchyid, @Child2 hierarchyid

SELECT @Manager = CAST('/3/1/' AS hierarchyid)
SELECT @Child1 = CAST('/3/1/1/' AS hierarchyid)
SELECT @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') ;

Örnekleri a, b ve c tamamladıktan sonra tabloya eklenen düğümler aşağıdaki ile eş olacak hierarchyiddeğerler:

/3/1/1/

/3/1/1.1/

/3/1/2/

Düğüm /3/1/1.1/düğümü büyük /3/1/1/ama hiyerarşisinde aynı düzeyde.

D.Skalar örnekleri

SQL Serverrasgele eklemeler ve silmeler herhangi destekler hierarchyiddüğüm. Kullanarak GetDescendant(), her ikisi arasında bir düğüm oluşturmak her zaman mümkün hierarchyiddüğümleri. Örnek düğümleri kullanarak oluşturmak için aşağıdaki kod yürütün 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()

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ığını aramalar GetDescendant()yöntemi:

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

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 bkz.

Başvuru

hierarchyid (Transact-sql)

Kavramlar

hierarchyid veri türü yöntemi başvurusu

Hiyerarşik veri (SQL Server)