Выбор вложенных элементов XML с использованием FOR XML - Best Practice - PullRequest
2 голосов
/ 19 февраля 2010

Я работаю над извлечением данных в формате 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 Ответ

0 голосов
/ 19 февраля 2010

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

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

...