Я столкнулся с этим вопросом, когда искал информацию о типе данных hierarchyid
, и подумал, что кому-нибудь еще, идущему за мной, будет интересно увидеть код для вставки hierarchyid
s в соответствии с вопросом.
Я не утверждаю, что это единственные способы ввода hierarchyid
s, но, надеюсь, это поможет тем, кто, как и я, не имел опыта работы с этим типом данных.
Используя эту таблицу,
create table OrgChart
(
Position hierarchyid,
Title nvarchar(50)
)
Вы можете использовать Parse для прямой вставки hierarchyid
с использованием строковых путей:
insert into OrgChart(Position, Title)
values (hierarchyid::Parse('/'), 'CEO'),
(hierarchyid::Parse('/1/'), 'Purchase Manager'),
(hierarchyid::Parse('/1/1/'), 'Purchase Executive'),
(hierarchyid::Parse('/2/'), 'Sales Manager'),
(hierarchyid::Parse('/2/1/'), 'Sales Executive')
и используйте следующий запрос для проверки таблицы
select Position.ToString(), * from OrgChart
Вы также можете использовать hierarchyid
методы типа данных GetRoot и GetDescendant для построения иерархии. Я нашел этот метод более громоздким, но я полагаю, что использование этих методов необходимо, если вы программно управляете иерархией.
declare @root hierarchyid,
@id hierarchyid
set @root = hierarchyid::GetRoot()
insert into OrgChart(Position, Title) values (@root, 'CEO')
set @id = @root.GetDescendant(null, null)
insert into OrgChart(Position, Title) values (@id, 'Purchase Manager')
set @id = @root.GetDescendant(@id, null)
insert into OrgChart(Position, Title) values (@id, 'Sales Manager')
select @id = Position.GetDescendant(null, null) from OrgChart where Title = 'Purchase Manager'
insert into OrgChart(Position, Title) values (@id, 'Purchase Executive')
select @id = Position.GetDescendant(null, null) from OrgChart where Title = 'Sales Manager'
insert into OrgChart(Position, Title) values (@id, 'Sales Executive')
Обязательно ознакомьтесь с ссылками, приведенными в другом ответе, но, надеюсь, этот код тоже поможет.