Существует ли установленный способ загрузки /чтения ветви дерева с помощью HierarchyId

Я играю с HierarchyId, и я не понял способ, основанный на наборе, чтобы сделать следующее:

  • вставить все поддерева сразу
  • восстановить все поддеревья сразу

Этот вопрос связан с моим предыдущим , и я подозреваю, что единственный способ выполнить эти две задачи с помощью HierarchyId - это один узел или один уровень за раз. Если я использую материализованный путь, то оба действия легко выполняются одной (и тривиальной) командой на основе набора.

Что мне не хватает?

Изменить: я также пропустил способ перемещения поддерева, но я узнал его из комментария Микаэла Эрикссона

11 голосов | спросил A-K 10 Mayam12 2012, 01:58:02

2 ответа


5

Используемая функция GetReparentedValue , но при использовании только GetReparentedValue дерево может оказаться в «непоследовательном» состоянии.

Вот какой код предоставил Microsoft, который позаботится об этом. Перемещение поддеревья .

Я предполагаю, что это связано с принудительным использованием дерева . Он использует вычисляемый столбец для родительского идентификатора, который делает самостоятельное присоединение к ПК.

ответил Mikael Eriksson 10 Maypm12 2012, 16:52:14
3

Получение всего поддерева простое - используйте метод IsDescendentOf, согласно MSDN

DECLARE @Manager hierarchyid
SELECT @Manager = OrgNode FROM HumanResources.EmployeeDemo
  WHERE LoginID = 'adventure-works\dylan0'

SELECT * FROM HumanResources.EmployeeDemo
WHERE OrgNode.IsDescendantOf(@Manager) = 1

Вставка более сложная, но ваша основная проблема будет связана с вашими ограничениями - вы, очевидно, не можете вставлять дочерние объекты, пока их родитель не будет совершен. В этом случае либо итерации, и вставки в иерархическом порядке, либо отключите ограничения и вставьте.

При вставке большого количества данных - переноса, пакетной или массовой вставки и т. д. - я отключу ограничение. При вставке в операционную систему я выполнял итерацию, так как я не сталкивался с экземплярами во время работы системы, где большие объемы необходимо вставлять в иерархию.

ответил Kirk Broadhurst 15 Mayam12 2012, 05:54:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132