GetAncestor (Mecanismo do Banco de Dados)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Retorna uma hierarchyid que representa o nº ancestral de this.

Sintaxe

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

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

n
Um int, que representa o número de níveis para elevar na hierarquia.

Tipos de retorno

Tipo de retorno do SQL Server: hierarchyid

Tipo de retorno do CLR: SqlHierarchyId

Comentários

Usado para testar se cada nó da saída possui o nó atual como um ancestral no nível específico.

Se um número maior que GetLevel() for passado, NULL será retornado.

Se um número negativo for passado, ocorrerá uma exceção.

Exemplos

a. Localizando os nós filho de um pai

GetAncestor(1) retorna os funcionários que têm david0 como o ancestral imediato (seu pai). O exemplo a seguir usa 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. Retornando os netos de um pai

GetAncestor(2) retorna os funcionários que estão dois níveis abaixo na hierarquia a partir do nó atual. Estes funcionários são os netos do nó atual. O exemplo a seguir usa 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. Retornando a linha atual

Para retornar o nó atual usando GetAncestor(0), execute o código a seguir.

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. Retornando um nível de hierarquia se uma tabela não existir

GetAncestor retornará o nível selecionado na hierarquia mesmo uma tabela não esteja presente. Por exemplo, o código a seguir especifica um funcionário atual e retorna a hierarchyid do ancestral do funcionário atual sem fazer referência a uma tabela.

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

E. Chamando um método de Common Language runtime

O snippet de código a seguir chama o método GetAncestor().

this.GetAncestor(1)  

Confira também

IsDescendantOf (Mecanismo de Banco de Dados)
Referência de método de tipo de dados hierarchyid
Dados hierárquicos (SQL Server)
hierarchyid (Transact-SQL)