SQL XML 嵌套元素

标签 sql sql-server xml xquery

我正在创建一个查询来发送批量电子邮件应用程序 XML,其中包含组装适当电子邮件所需的所有内容。我似乎无法让嵌套元素正常工作。

我正在尝试获取看起来像这样的 XML

    <EmailsToBeSent>
        <EmailToBeSent>
            <ReferenceId>1</ReferenceId>
                <Tags>
                    <Tag>
                        <Name>ToAddress</Name>
                        <Value><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c3a1afa2ab83a1afa2abeda0acae" rel="noreferrer noopener nofollow">[email protected]</a></Value>
                    </Tag>
                    <Tag>
                        <Name>CCAddress</Name>
                        <Value><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="522b33363633122b333636337c313d3f" rel="noreferrer noopener nofollow">[email protected]</a></Value>
                    </Tag>
                    <Tag>
                        <Name>FromAddress</Name>
                        <Value><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0b666e4b666e25686466" rel="noreferrer noopener nofollow">[email protected]</a></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><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e1838d8089a1838d8089cf828e8c" rel="noreferrer noopener nofollow">[email protected]</a></Value>
                <Name>CCAddress</Name>
                <Value><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5e273f3a3a3f1e273f3a3a3f703d3133" rel="noreferrer noopener nofollow">[email protected]</a></Value>
                <Name>FromAddress</Name>
                <Value><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c0ada580ada5eea3afad" rel="noreferrer noopener nofollow">[email protected]</a></Value>
            </Tag>
        </Tags>
        <SomethingElse>'asASas'</SomethingElse>                
    </EmailToBeSent>
</EmailsToBeSent>

最佳答案

只需在组之间添加分隔符即可。

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')

关于SQL XML 嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38707402/

相关文章:

php - 变量 'sql_mode' 无法设置为“REPLACE”的值

php - 根据sql语句中的其他字段选择正确的字段

SQL Server 添加作业代理 T-SQL 脚本问题

sql - 获取 SP 结果集的计数 (SP_MSForeachtable)

c# - 从 .NET 客户端调用 Web API (C#)

php - 有什么办法可以在 PHP 中将 json 转换为 xml?

mysql - 选择与 n_m 表的内连接

sql - 无法在 PostgreSQL 中查询表详细信息

sql-server - sqlcmd 连接

java - 如果用户在注册时没有从图库中选择任何照片,我如何提醒用户?