Share via


GetAncestor (データベース エンジン)

this の n 番目の先祖を表す hierarchyid を返します。

構文

-- Transact-SQL syntax
child.GetAncestor ( n ) 

-- CLR syntax
SqlHierarchyId GetAncestor ( int n )

引数

  • n
    階層を上がるレベル数を表す int。

戻り値の型

**SQL Server の戻り値の型 :**hierarchyid

**CLR の戻り値の型 :**SqlHierarchyId

説明

出力の各ノードにとって、現在のノードが指定したレベルの先祖であるかどうかをテストするときに使用します。

GetLevel() より大きい数値が渡されると、NULL が返されます。

負の数が渡されると、例外が発生します。

A. 親の子ノードを検索する

GetAncestor(1) は、david0 をその直接の先祖 (親) とする従業員を返します。GetAncestor(1) の使用例を次に示します。

DECLARE @CurrentEmployee hierarchyid
SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeDemo
WHERE LoginID = 'adventure-works\david0'

SELECT OrgNode.ToString() AS Text_OrgNode, *
FROM HumanResources.EmployeeDemo
WHERE OrgNode.GetAncestor(1) = @CurrentEmployee ;

B. 親の孫を返す

GetAncestor(2) は、階層内で現在のノードより 2 つ下のレベルにある従業員を返します。これは現在のノードの孫にあたります。GetAncestor(2) の使用例を次に示します。

DECLARE @CurrentEmployee hierarchyid
SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeDemo
WHERE LoginID = 'adventure-works\ken0'

SELECT OrgNode.ToString() AS Text_OrgNode, *
FROM HumanResources.EmployeeDemo
WHERE OrgNode.GetAncestor(2) = @CurrentEmployee ;

C. 現在の行を返す

GetAncestor(0) を使用して現在のノードを返すには、次のコードを実行します。

DECLARE @CurrentEmployee hierarchyid
SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeDemo
WHERE LoginID = 'adventure-works\david0'

SELECT OrgNode.ToString() AS Text_OrgNode, *
FROM HumanResources.EmployeeDemo
WHERE OrgNode.GetAncestor(0) = @CurrentEmployee ;

D. テーブルが存在しない場合に階層レベルを返す

GetAncestor は、テーブルが存在しない場合でも、階層内の選択したレベルを返します。たとえば、次のコードでは、現在の従業員を指定し、テーブルを参照せずに現在の従業員の先祖の hierarchyid を返します。

DECLARE @CurrentEmployee hierarchyid ;
DECLARE @TargetEmployee hierarchyid ;
SELECT @CurrentEmployee = '/2/3/1.2/5/3/' ;
SELECT @TargetEmployee = @CurrentEmployee.GetAncestor(2) ;
SELECT @TargetEmployee.ToString(), @TargetEmployee ;

E. 共通言語ランタイム メソッドを呼び出す

次のコード例では GetAncestor() メソッドを呼び出します。

this.GetAncestor(1)