У меня есть иерархическая структура данных:
CREATE TABLE [Employees] (
[Id] INT identity(1, 1) PRIMARY KEY
,[Hid] HIERARCHYID NOT NULL
,[Name] VARCHAR(50) NULL
,[Secondname] VARCHAR(50)
,[Surname] VARCHAR(50)
,[BossId] INT FOREIGN KEY REFERENCES [Employees]([Id])
,[PositionId] INT FOREIGN KEY REFERENCES [Positions]([Id])
,[DepartmentId] INT FOREIGN KEY REFERENCES [Departments]([Id])
,[RecruitDate] DATE NOT NULL
);
Таблица представляет собой данные о сотрудниках и их руководителях. Если где-то по середине иерархии я решу сменить руководителя, то получается, что я изменю столбец
Hid, таким образом, у предков (подчиненных) этого узла будет неправильный
Hid.GetAncestor(1). И такая же ситуация будет у потомков потомков. Получается, надо делать рекурсивную замену всех дочерних узлов.
Есть ли более простой способ (или уже существующий метод) сделать такую штуку?
Спасибо.