Выбор вложенных элементов 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 (предположительно, что-то потребляет это и ожидает определенный формат).