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