2016-08-01 6 views
2

Я создаю запрос на отправку массового приложения электронной почты для электронной почты всего, что ему нужно, чтобы собрать соответствующее письмо. Кажется, я не могу правильно вставить вложенные элементы.SQL XML Вложенные элементы

Я пытаюсь получить XML, который выглядит как

<EmailsToBeSent> 
     <EmailToBeSent> 
      <ReferenceId>1</ReferenceId> 
       <Tags> 
        <Tag> 
         <Name>ToAddress</Name> 
         <Value>[email protected]</Value> 
        </Tag> 
        <Tag> 
         <Name>CCAddress</Name> 
         <Value>[email protected]</Value> 
        </Tag> 
        <Tag> 
         <Name>FromAddress</Name> 
         <Value>[email protected]</Value> 
        </Tag> 
       </Tags> 
      <SomethingElse>'asASas'</SomethingElse>     
     </EmailToBeSent> 
    </EmailsToBeSent> 

До сих пор ближе я получил это:

SELECT 
    ReferenceId, 
    (SELECT 
     'ToAddress' AS "Tag/Name", 
     ToAddress AS "Tag/Value", 
     'CCAddress' AS "Tag/Name", 
     CCAddress AS "Tag/Value", 
     'FromAddress' AS "Tag/Name", 
     FromAddress AS "Tag/Value" 
    FROM 
     EmailTable AS ET 
    WHERE 
     ET.ReferenceId = RT.ReferenceId 
    FOR XML PATH('Tags'), TYPE), 
    'asASas' AS SomethingElse 
FROM 
    RefTable AS RT 
FOR XML PATH('EmailToBeSent'), ROOT('EmailsToBeSent') 

Какие результаты в:

<EmailsToBeSent> 
    <EmailToBeSent> 
     <ReferenceId>1</ReferenceId> 
     <Tags> 
      <Tag> 
       <Name>ToAddress</Name> 
       <Value>[email protected]</Value> 
       <Name>CCAddress</Name> 
       <Value>[email protected]</Value> 
       <Name>FromAddress</Name> 
       <Value>[email protected]</Value> 
      </Tag> 
     </Tags> 
     <SomethingElse>'asASas'</SomethingElse>     
    </EmailToBeSent> 
</EmailsToBeSent> 
+1

Пожалуйста, создайте несколько #temp-таблиц, которые представляют ваши «EmailTable» и «RefTable», а также некоторые инструкции вставки с примерами данных. – granadaCoder

ответ

2

Просто добавьте сепараторы между группами.

SELECT ReferenceId 
    , (SELECT 'ToAddress'  AS "Tag/Name" 
       , ToAddress  AS "Tag/Value" 
       , null   AS "separator" 
       , 'CCAddress' AS "Tag/Name" 
       , CCAddress  AS "Tag/Value" 
       , null   AS "separator" 
       , 'FromAddress' AS "Tag/Name" 
       , FromAddress AS "Tag/Value" 
     FROM EmailTable AS ET 
     WHERE ET.ReferenceId = RT.ReferenceId 
     FOR XML PATH('Tags'),TYPE 
     ) 
    , 'asASas' AS SomethingElse 

FROM RefTable AS RT 
FOR XML PATH('EmailToBeSent'), ROOT('EmailsToBeSent') 
+0

всегда полезно знать – JamieD77

+0

Удивительно, похоже, это сработало! Благодаря! –