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