次の方法で共有


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

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

thisn 番目の先祖を表す hierarchyid が返されます。

構文

-- Transact-SQL syntax  
child.GetAncestor ( n )   
-- CLR syntax  
SqlHierarchyId GetAncestor ( int n )  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

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)  

参照

IsDescendantOf (データベース エンジン)
hierarchyid データ型メソッド リファレンス
階層データ (SQL Server)
hierarchyid (Transact-SQL)