Выбор вложенных элементов Xml с помощью FOR XML — передовой опыт

Я работаю над получением данных в формате 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 и генерировать оттуда?


person Leigh S    schedule 19.02.2010    source источник


Ответы (1)


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

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

person Mitch Wheat    schedule 19.02.2010
comment
Эй, Митч, да, у меня есть четко определенный XSD, который я проверяю перед использованием XML. У меня возникла проблема с получением вложенной структуры XML без использования коррелированного подзапроса. Я что-то упустил в отношении использования схем XML для создания моего XML из SQL? - person Leigh S; 19.02.2010