1
I have a user table, with the use of hierarchyid, I need to remove all Subordinate Users from User 1 and assign them to User 2.
SELECT 
    US.cd_usuario       
    ,(SELECT cd_usuario FROM USUARIO USR WHERE USR.NODE = US.NODE.GetAncestor(1)) AS CD_USUARIO_RESPONSAVEL
FROM 
    USUARIO
Select data:
| cd_usuario    | CD_USUARIO_RESPONSAVEL
1               null   
2               null   
3               1   
4               1
I need it to stay that way:
| cd_usuario    | CD_USUARIO_RESPONSAVEL
1               null   
2               null   
3               2   
4               2
    DECLARE @CD_USUARIO_OLD INT, @CD_USUARIO_NEW INT
    SET @CD_USUARIO_OLD = 1
    SET @CD_USUARIO_NEW = 2
    DECLARE @NODE_USUARIO_RESPONSAVEL hierarchyid
    DECLARE @NODE_USUARIO_OLD hierarchyid
    DECLARE @NODE_USUARIO_NEW hierarchyid
    SELECT @NODE_USUARIO_RESPONSAVEL = NODE.GetAncestor(1).ToString() FROM USUARIO WHERE cd_usuario = @CD_USUARIO_OLD
    SELECT @NODE_USUARIO_OLD = NODE FROM USUARIO WHERE cd_usuario = @CD_USUARIO_OLD
    SELECT @NODE_USUARIO_NEW = NODE FROM USUARIO WHERE cd_usuario = @CD_USUARIO_NEW
    SELECT @NODE_USUARIO_NEW = @NODE_USUARIO_NEW.GetDescendant(max(NODE), NULL)
    FROM USUARIO WHERE NODE.GetAncestor(1) = @NODE_USUARIO_NEW
    UPDATE USUARIO SET NODE = NODE.GetReparentedValue(@NODE_USUARIO_RESPONSAVEL, @NODE_USUARIO_NEW)
    WHERE NODE.IsDescendantOf(@NODE_USUARIO_OLD) = 1
This solution does not serve, because I wanted to use the hierarchical data resource SQL.
– Gabriel Santos Reis