GetAncestor (Mecanismo do Banco de Dados)
Retorna um hierarchyid que representa o ancestral nth deste.
Sintaxe
-- Transact-SQL syntax
child.GetAncestor ( n )
-- CLR syntax
SqlHierarchyId GetAncestor ( int n )
Argumentos
- n
Um int, representando o número de níveis para elevar na hierarquia.
Tipos de retorno
Tipo de retorno do SQL Server:hierarchyidhierarchyid
Tipo de retorno CLR:SqlHierarchyIdSqlHierarchyId
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 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 este código.
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 não existir uma tabela
GetAncestor retornará o nível selecionado na hierarquia mesmo que não haja uma tabela. Por exemplo, o código a seguir designa um funcionário atual e retorna a hierarchyid do ancestral do funcionário atual sem fazer referência à 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 tempo de execução de linguagem comum
O seguinte trecho de código chama o método GetAncestor():
this.GetAncestor(1)