Выбор вложенных элементов XML с использованием FOR XML - Best Practice

Я работаю над извлечением данных в формате XML из SQL Server 05, используя FOR XML

Какова наилучшая практика для вложения элементов в мой получившийся Xml?

В настоящее время я делаю это:

Select 
    (
        Select 
            [Col1] As [Col1],
            [Col2] As [Col2]
        From [dbo].[NestedTable] As T1
        Where T0.[Key] = T1.[Key]
        FOR XML PATH('NestedTable'), TYPE   
    ),
    [Col1] As [Col1],
    [Col2] As [Col2],
From [dbo].[TopLevelTable] As T0
FOR XML PATH('TopLevelTable'), ROOT('TopLevelTableItems')   

Тем не менее, я обеспокоен производительностью этого из-за коррелированного подзапроса. Есть ли функциональность типа "группа по", которую я могу использовать, чтобы я мог выполнять регулярное внутреннее объединение для двух таблиц и получить в результате XML, где узлы верхнего уровня уникальны и имеют соответствующую коллекцию дочерних узлов?

Редактировать Кажется, что я могу просить невозможного, учитывая отсутствие ответов. Так что, возможно, лучший вопрос:

Есть ли хороший / лучший способ генерировать Xml из SQL Server или я должен просто перенести свой код в CLR и генерировать оттуда?

1 ответ

Если возможно, следует избегать коррелированных подзапросов (не имеет большого значения, если таблицы гарантированно будут небольшими).

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

Другие вопросы по тегам