Как написать рекурсивный запрос T-SQL для возврата иерархических данных, используя общую самосоединяющуюся таблицу для хранения данных дерева

Нет. Сериализатор XML работает с XML-схемой, а «True» и «False» недействительны. Booleans.

Вы можете использовать XML Transform для преобразования этих двух значений или реализовать интерфейс IXmlSerializable и выполнить сериализации и десериализации.

1
задан ChadD 23 February 2019 в 20:04
поделиться

1 ответ

Судя по последним данным, вы получите желаемый результат:

WITH rCTE AS(
    SELECT 1 AS Level,
           id AS GroupID,
           [name] AS GroupName,
           CONVERT(nvarchar(10),NULL) AS ParentID, --This'll be uniqueidentifier in your real version
           CONVERT(nvarchar(255),NULL) AS ParentName
    FROM BPAGroup G
    WHERE NOT EXISTS (SELECT 1
                      FROM BPAGroupGroup e
                      WHERE e.memberid = G.id)
    UNION ALL
    SELECT r.Level + 1,
           G.id AS GroupID,
           G.[name] AS GroupName,
           r.GroupID AS ParentID,
           r.[GroupName] AS ParentName
    FROM BPAGroup G
         JOIN BPAGroupGroup GG ON G.id = GG.memberid
         JOIN rCTE r ON GG.groupid = r.GroupID)
SELECT *
FROM rCTE;

db <> fiddle

Важно, чтобы вы понимали, как это работает хотя. Как вы сказали в своем посте, вам, кажется, нужно каждый раз пересматривать их. Нет ничего плохого в том, что нужно что-то проверять синтаксис (есть некоторые вещи, которые я иногда с треском проваливаю при запоминании, особенно новые вещи OPENJSON), но понимаете ли вы, как это работает? Если нет, какой бит не так ли?

0
ответ дан Larnu 23 February 2019 в 20:04
поделиться
Другие вопросы по тегам:

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