2016-08-01 157 views
2

我正在创建一个查询来发送批量电子邮件应用程序XML,它包含组装相应电子邮件所需的所有内容。我似乎无法让嵌套元素正常工作。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

请创建一些代表您的“EmailTable”和“RefTable”的#temp表格以及一些带有示例数据的插入语句。 – 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

真棒,它看起来像它的工作!谢谢! –