Похоже, что реальный вопрос заключается в том, как запросить данные в иерархическом порядке. Это возможно при использовании рекурсивных запросов , но более быстрой альтернативой является использование поддержки SQL Server для иерархических данных .
Рекурсивный запрос, который возвращает данные в иерархическом порядке, будет выглядеть следующим образом:
WITH h AS
(
SELECT
ID,Code,Name,Qty,Amount,is_parent,parent_id,remarks
FROM
dbo.ThatTable
WHERE
parent_id=0
UNION ALL
SELECT
c.ID,c.Code,c.Name,c.Qty,c.Amount,c.is_parent,c.parent_id,c.remarks
FROM
dbo.ThatTable c
INNER JOIN h ON
c.parent_id= h.Id
)
SELECT * FROM h
Производительность этого запроса будет приемлемой, если поля ID
и Parent_ID
проиндексированы, ноне очень.
Добавление поля hierarchyid
в таблицу сделает запрос проще и намного быстрее. Предполагая, что есть поле hierarchy
, запрос будет просто:
SELECT *
FROM ThatTable
ORDER BY hierarchy
Добавление индекса на hierarchy
сделает этот запрос и любой запрос, который ищет, например, дочерние элементы определенного узла, очень быстрым. Вместо рекурсивного запроса серверу нужно только изучить этот единственный индекс.
В статье Урок 1. Преобразование таблицы в иерархическую структуру показано, как создать новую таблицу с hierarchyid
и заполнить ее из родительских / дочерних данных.