Telstra Ответов: 3

Добавление продукта в иерархическом порядке в таблицу


Всем Привет,

У меня есть таблица, один столбец которой имеет тип hierarchyid. Теперь я хочу добавить еще один продукт и субпродукты к этому новому продукту. Не могли бы вы помочь, как получить последний идентификатор существующего продукта и добавить к нему дочерний продукт.

Структура этой колонки выглядит следующим образом/1/,/1/1/,/1/1/1/ и так далее. Таким образом, мы имеем /7/,/7/1/..... Теперь я хочу добавить новый, например /8/, /8/1/,/8/1/1 и так далее.

Что я уже пробовал:

Я добавил новую запись, используя следующий запрос. Но продукт добавляется в первую строку пользовательского интерфейса. Он должен быть добавлен в последнюю строку. TaxonomyNode-это столбец hirarchyid. taxonomyid-это столбец идентификаторов.

вставить в tblname
(TaxonomyId,Таксономинод,TaxonomyName,DeletedInd,CreatedOn,Обработки,Поиск,UpdatedBy)

значения ('/8/','test','0',getdate(),'abd',getdate(),'abd')

Kornfeld Eliyahu Peter

Таблица - это таблица, предназначенная не для отображения иерархических данных, а для табличных данных...
Используйте иерархический элемент пользовательского интерфейса, например treeview, для отображения иерархических данных...

Telstra

Но таблица создается таким образом, и я должен следовать существующей структуре.

Maciej Los

Вы имеете в виду, что Taxonomyid-это как: /8/, /8/1/,/8/1/1?
Вы хотите найти решение C# или clear T-SQL? Какой из них вы предпочитаете?

Telstra

Решение Tsql-это требования.

Sinisa Hajnal

Это должен быть переработан, не используется :)

3 Ответов

Рейтинг:
1

Maciej Los

Я добавил новую запись, используя следующий запрос. Но продукт становится все больше и больше первый ряд на UI. Это должно быть добавлено дальше последний ряд. TaxonomyNode-это столбец hirarchyid. taxonomyid-это столбец идентификаторов.


Нет такого выражения: "первый ряд" или "последний ряд" в терминологии реляционная база данных[^Порядок записей зависит от многих факторов, например: индекса, первичного и внешнего ключей и т. д. Порядок данных в пользовательском интерфейсе зависит от настроек приложения.

Если вы хотите отсортировать данные в определенном порядке, особенно когда вы хотите их отобразить, вы должны использовать предложение order by[^].

Для получения более подробной информации, пожалуйста, прочтите это:
Иерархические данные (SQL Server) | Майкрософт Документы[^]
Иерархические данные (SQL Server)[^]
Учебник: использование типа данных hierarchyid | Microsoft Docs[^]
а также:
sql - как работает индексация базы данных? - переполнение стека[^]


Рейтинг:
0

W∴ Balboos, GHB

Существует два основных способа создания иерархических отношений в таблицах.

1) одна таблица, родительская запись и каждая последующая (дочерняя запись) имеют столбец, чтобы связать его с родительской записью (дочерний элемент родителя должен быть самим собой). Это может продолжаться и дальше, до тошнотысоздание дерева любой глубины. Это глупая и неэффективная конструкция, но ее можно заставить работать. Бывают ситуации, когда это "правильное" решение, но лучше ...
2) Создайте вторую таблицу - имейте столбец, ссылающийся на идентификатор первой (родительской) таблицы, и все с той же ссылкой являются дочерними элементами одного и того же родителя. Вы можете повесить столько столов от родителей, сколько пожелаете, и даже повесить детей на детей. Он гибок и способен вносить множество изменений, которые никак не влияют на существующий код.

Поскольку SQL, MySQL и т. д. являются "ссылочными" базами данных, использование (2), ссылочной методологии, было бы лучше всего для решения ваших проблем. Обратите внимание, что вы можете использовать существующую таблицу в качестве родительской, создать свою дочернюю таблицу, и все, что использовало исходный родитель, даже не будет знать об этом, если вы не сделаете их осведомленными.


Рейтинг:
0

Telstra

Привет,

Я нашел решение. Нам не нужно использовать такие функции, как GetAncestor или другие. Мы можем вставить запись непосредственно в столбцы hierarchyid, например

insert into tblname values ('/5/23/1/','prod name','0',getdate(),'abd',getdate(),'abd')


Я реализовал этот способ и его работу.