Aracılığıyla paylaş


GetDescendant (Veritabanı Altyapısı)

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

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

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

Bağımsız değişkenler

  • child1
    NULL veya hierarchyid Geçerli düğüm alt.

  • child2
    NULL veya hierarchyid Geçerli düğüm alt.

Dönüş Türleri

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

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

Remarks

Bir alt, üst, alt düğüm bir) verir.

  • Üst NULL ise, NULL döndürüyor.

  • Üst alt, üst BOş değil ve child1 hem alt2 NULL olduğundan, verir.

  • Üst ve child1 BOş olmayan ve alt2 NULL ise, üst alt child1 büyük verir.

  • Üst alt üst ve alt2 BOş olmayan ve NULL child1 varsa, alt2'dan küçük döndürür.

  • Üst ve child1 alt2 NULL olmayan, üst alt child1 daha büyüktür ve küçüktür alt2 verir.

  • Child1 NULL ve üst alt değil ise, bir özel duruma neden oldu.

  • Alt2 NULL ve üst alt değil ise, bir özel duruma neden oldu.

  • Child1 >alt2 = bir özel duruma neden oldu.

GetDescendant Deterministic olur.Bu nedenle, GetDescendant adlandırılır ile aynı girdileri, aynı çıkışı her zaman üretecektir. Ancak, üretilen alt tam kimliğinin ilişkisini diğer düğümlere bağlı olarak c örnekte gösterildiği gibi değişebilir

Örnekler

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

Yeni BIR çalışan, bir düğümdeki varolan bir çalışan için işe /3/1/. Aşağıdaki kodu kullanarak yeni bir satır eklemek için yürütmek GetDescendant Yeni bir satır düğüm olarak belirtmek için bağımsız değişken olmadan yöntem /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') ;

b.Bir büyük alt düğümü olarak bir satır ekleme

Başka bir yeni çalışan işe A. örnekte olduğu gibi aynı yöneticiyi bildirdiği içinAşağıdaki kodu kullanarak yeni bir satır eklemek için yürütmek GetDescendant düğümü yeni satırın örnekte A düğümü izleyeceği belirtmek için alt 1 bağımsız değişkenini kullanarak, olma yöntem /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') ;

c.Var olan iki düğüm arasında bir satır ekleme

Üçüncü BIR çalışanı işe A. örnekte olduğu gibi aynı yöneticiyi bildirdiği içinBu örnek, büyük bir düğüm için yeni satır ekler FirstNewEmployee örnekte, A ve küçüktür SecondNewEmployee B. örnekte Aşağıdaki kodu kullanarak yürütmek GetDescendant yöntem. Child1 bağımsız değişkeni hem de alt2 bağımsız değişkeni düğüm yeni satırın düğüm olacak belirtmek için kullanın... /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') ;

Örnekleri A, B ve C tamamladıktan sonra tabloya eklenen düğüm eşleri aşağıdaki olacaktır hierarchyid Değ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/ Ancak aynı hiyerarşi düzeyinde.

d.skaler örnekleri

SQL Server rasgele eklemeleri ve silmeleri herhangi destekler. hierarchyid düğümlerin. Kullanarak GetDescendant(), arasındaki herhangi iki düğüm oluşturmak her zaman mümkündür hierarchyid düğümlerin. Örnek düğümlerin kullanarak oluşturmak için şu kodu çalıştırı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()

e.CLR örnek

Parçacık çağrıları aşağıdaki kod GetDescendant() yöntem:

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