Share via


Consultando uma tabela hierárquica usando métodos de hierarquia

Agora que a tabela HumanResources.EmployeeOrg está completamente populada, essa tarefa mostrará como consultar a hierarquia usando alguns métodos hierárquicos.

Para localizar nós subordinados

  1. Sariya tem um funcionário subordinado. Para identificar os subordinados de Sariya, execute a seguinte consulta, que usa o método IsDescendant:

    DECLARE @CurrentEmployee hierarchyid
    
    SELECT @CurrentEmployee = OrgNode
    FROM HumanResources.EmployeeOrg
    WHERE EmployeeID = 46 ;
    
    SELECT *
    FROM HumanResources.EmployeeOrg
    WHERE OrgNode.IsDescendantOf(@CurrentEmployee) = 1 ;
    

    O resultado lista Sariya e Wanida. Sariya é listada porque é a descendente no nível 0. Wanida é a descendente no nível 1.

  2. Você também pode consultar essas informações usando o método GetAncestor. O GetAncestor leva um argumento para o nível ao qual você está tentando retornar. Como Wanida está um nível abaixo de Sariya, use GetAncestor(1) conforme demonstrado no seguinte código:

    DECLARE @CurrentEmployee hierarchyid
    
    SELECT @CurrentEmployee = OrgNode
    FROM HumanResources.EmployeeOrg
    WHERE EmployeeID = 46 ;
    
    SELECT OrgNode.ToString() AS Text_OrgNode, *
    FROM HumanResources.EmployeeOrg
    WHERE OrgNode.GetAncestor(1) = @CurrentEmployee
    

    Desta vez o resultado lista apenas Wanida.

  3. Agora altere o @CurrentEmployee para David (EmployeeID 6) e o nível para 2. Execute o seguinte para retornar também Wanida:

    DECLARE @CurrentEmployee hierarchyid
    
    SELECT @CurrentEmployee = OrgNode
    FROM HumanResources.EmployeeOrg
    WHERE EmployeeID = 6 ;
    
    SELECT OrgNode.ToString() AS Text_OrgNode, *
    FROM HumanResources.EmployeeOrg
    WHERE OrgNode.GetAncestor(2) = @CurrentEmployee
    

    Desta vez, você também recebe Mary que também é subordinada a David, dois níveis abaixo.

Para usar GetRoot e GetLevel

  1. À medida que a hierarquia fica maior é mais difícil determinar onde os membros estão na hierarquia. Use o método GetLevel para localizar quantos níveis abaixo cada linha está na hierarquia. Execute o seguinte código para exibir os níveis de todas as linhas:

    SELECT OrgNode.ToString() AS Text_OrgNode, 
    OrgNode.GetLevel() AS EmpLevel, *
    FROM HumanResources.EmployeeOrg ;
    GO
    
  2. Use o método GetRoot para localizar o nó raiz na hierarquia. O seguinte código retorna uma única linha que é a raiz:

    SELECT OrgNode.ToString() AS Text_OrgNode, *
    FROM HumanResources.EmployeeOrg
    WHERE OrgNode = hierarchyid::GetRoot() ;
    GO
    

A próxima tarefa reorganizará a hierarquia.