sql - 如何在子查询中使用 FOR XML?

标签 sql sql-server xml for-xml

我想返回以下 xml:

<ResultDetails>
<Node1>hello</Node1>
<Sites>
<Site><SiteId>1</SiteId></Site>
<Site><SiteId>2</SiteId></Site>
</Sites>
</ResultDetails>

我写了下面的代码但是不起作用:

SELECT 'hello' AS Node1,    
    (SELECT TOP 2 SiteId
     FROM [dbo].[Sites]
       FOR XML PATH('Site')) AS Sites
FOR XML PATH('ResultDetails')

但它返回:

<ResultDetails>
  <row>
    <Node1>hello</Node1>
    <Sites>&lt;Site&gt;&lt;siteId&gt;102&lt;/siteId&gt;&lt;/Site&gt;&lt;Site&gt;&lt;siteId&gt;1&lt;/siteId&gt;&lt;/Site&gt;</Sites>
  </row>
</ResultDetails>

应该写什么sql?

谢谢,

最佳答案

您需要将 TYPE 修饰符添加到您的内部查询:

SELECT
    'hello' AS Node1
    , (
        SELECT TOP 2 SiteId 
            FROM [dbo].[Sites] 
        FOR XML PATH('Site'), TYPE
    ) AS Sites 
FOR XML PATH('ResultDetails') 

关于sql - 如何在子查询中使用 FOR XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11721213/

相关文章:

java - 如何根据sys_updated_on过滤serviceNow事件记录

c# XmlElment 更改派生类中的顺序

.net - VB.NET 代码中的 SQL 查询

sql - SQL中的NULL是什么?

sql - 在 SQL 的 CAST 中使用 & 号

c# - 使用 SQL 更新特定行

MySQL - 多列中具有相同值的行

用于条件选择的 SQL 查询

sql - 我只是不明白为什么这个查询不拉结果

java - 如何使用 XSL 和 Java Transformer 类将 XML 转换为 HTML