Reputation: 81
I am creating a query to send a bulk email app XML of everything it needs to assemble the appropriate email. I can't seem to get the nested elements to work correctly.
I am trying to get XML that looks like
<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>
So far the closest I have gotten is:
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')
Which results in:
<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>
Upvotes: 2
Views: 796
Reputation: 9460
Just add separators between groups.
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')
Upvotes: 3