Partilhar via


GetDescendant (Mecanismo de Banco de Dados)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Retorna um nó filho do pai.

Syntax

-- Transact-SQL syntax  
parent.GetDescendant ( child1 , child2 )   
-- CLR syntax  
SqlHierarchyId GetDescendant ( SqlHierarchyId child1 , SqlHierarchyId child2 )   

Arguments

child1
NULL ou o hierarchyid de um filho do nó atual.

child2
NULL ou o hierarchyid de um filho do nó atual.

Tipos de devolução

Tipo de retorno do SQL Server:hierarchyid

tipo de retorno CLR:SqlHierarchyId

Remarks

Retorna um nó filho que é descendente do pai.

  • Se parent for NULL, retornará NULL.
  • Se parent não for NULL, e child1 e child2 forem NULL, retornará um filho do pai.
  • Se parent e child1 não forem NULL e child2 for NULL, retornará um filho do pai maior que child1.
  • Se pai e filho2 não forem NULL e filho1 for NULL, retornará um filho do pai menor que filho2.
  • Se pai, filho1 e filho2 não forem NULL, retornará um filho de pai maior que filho1 e menor que filho2.
  • Se child1 não for NULL e não for filho dos pais, uma exceção será gerada.
  • Se child2 não for NULL e não for filho dos pais, uma exceção será gerada.
  • Se child1 >= child2, uma exceção é criada.

GetDescendant é determinista. Portanto, se GetDescendant for chamado com as mesmas entradas, ele sempre produzirá a mesma saída. No entanto, a identidade exata da criança produzida pode variar dependendo de sua relação com os outros nós, como demonstrado no exemplo C.

Examples

A. Inserindo uma linha como o nó menos descendente

Um novo funcionário é contratado, reportando-se a um funcionário existente no nó /3/1/. Execute o código a seguir para inserir a nova linha usando o método GetDescendant sem argumentos para especificar o novo nó de linhas como /3/1/1/:

DECLARE @Manager hierarchyid;   
SET @Manager = CAST('/3/1/' AS hierarchyid);  
  
INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)  
VALUES  
(@Manager.GetDescendant(NULL, NULL),  
'adventure-works\FirstNewEmployee', 'Application Intern', '3/11/07') ;  

B. Inserindo uma linha como um nó descendente maior

Outro novo funcionário é contratado, reportando-se ao mesmo gerente do exemplo A. Execute o código a seguir para inserir a nova linha usando o método GetDescendant usando o argumento filho 1 para especificar que o nó da nova linha seguirá o nó no exemplo A, tornando-se /3/1/2/:

DECLARE @Manager hierarchyid, @Child1 hierarchyid;  
  
SET @Manager = CAST('/3/1/' AS hierarchyid);  
SET @Child1 = CAST('/3/1/1/' AS hierarchyid);  
  
INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)  
VALUES  
(@Manager.GetDescendant(@Child1, NULL),  
'adventure-works\SecondNewEmployee', 'Application Intern', '3/11/07') ;  

C. Inserindo uma linha entre dois nós existentes

Um terceiro funcionário é contratado, reportando-se ao mesmo gerente do exemplo A. Este exemplo insere a nova linha em um nó maior que o FirstNewEmployee no exemplo A e menor que o SecondNewEmployee no exemplo B. Execute o código a seguir usando o método GetDescendant. Use o argumento child1 e o argumento child2 para especificar que o nó da nova linha se tornará nó /3/1/1.1/:

DECLARE @Manager hierarchyid, @Child1 hierarchyid, @Child2 hierarchyid;  
  
SET @Manager = CAST('/3/1/' AS hierarchyid);  
SET @Child1 = CAST('/3/1/1/' AS hierarchyid);  
SET @Child2 = CAST('/3/1/2/' AS hierarchyid);  
  
INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)  
VALUES  
(@Manager.GetDescendant(@Child1, @Child2),  
'adventure-works\ThirdNewEmployee', 'Application Intern', '3/11/07') ;  
  

Depois de concluir os exemplos A, B e C, os nós adicionados à tabela serão pares com os seguintes valores de hierarchyid :

/3/1/1/

/3/1/1.1/

/3/1/2/

A /3/1/1.1/ do nó é maior que a /3/1/1/ do nó, mas no mesmo nível na hierarquia.

D. Exemplos escalares

O SQL Server dá suporte a inserções e exclusões arbitrárias de qualquer nós de hierarchyid. Usando GetDescendant(), é sempre possível gerar um nó entre quaisquer dois hierarchyid nós. Execute o seguinte código para gerar nós de exemplo usando GetDescendant:

DECLARE @h hierarchyid = hierarchyid::GetRoot();  
DECLARE @c hierarchyid = @h.GetDescendant(NULL, NULL);  
SELECT @c.ToString();  
DECLARE @c2 hierarchyid = @h.GetDescendant(@c, NULL);  
SELECT @c2.ToString();  
SET @c2 = @h.GetDescendant(@c, @c2);  
SELECT @c2.ToString();  
SET @c = @h.GetDescendant(@c, @c2);  
SELECT @c.ToString();  
SET @c2 = @h.GetDescendant(@c, @c2);  
SELECT @c2.ToString();  

E. Exemplo de CLR

O trecho de código a seguir chama o método GetDescendant():

SqlHierarchyId parent, child1, child2;  
parent = SqlHierarchyId.GetRoot();  
child1 = parent.GetDescendant(SqlHierarchyId.Null, SqlHierarchyId.Null);  
child2 = parent.GetDescendant(child1, SqlHierarchyId.Null);  
Console.Write(parent.GetDescendant(child1, child2).ToString());  

Consulte também

de referência do método de tipo de dados hierarchyid
dados hierárquicos (SQL Server)
hierarchyid (Transact-SQL)