GetAncestor (Database Engine)
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體
傳回 hierarchyid,代表 this 的第 n 個上階。
Syntax
-- Transact-SQL syntax
child.GetAncestor ( n )
-- CLR syntax
SqlHierarchyId GetAncestor ( int n )
注意
若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔。
引數
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)
會傳回在階層中位於目前節點下面兩個層級的員工。 這些員工就是目前節點的孫系。 下列範例會使用 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. 呼叫 Common Language Runtime 方法
下列程式碼片段會呼叫 GetAncestor()
方法。
this.GetAncestor(1)
另請參閱
IsDescendantOf (Database Engine)
Hierarchyid 資料類型方法參考
階層式資料 (SQL Server)
hierarchyid (Transact-SQL)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應