嵌套元素FOR SQL Server中的XML

时间:2017-01-24 17:31:12

标签: sql-server xml

我正在尝试从SQL Server创建XML,但我仍然坚持使用嵌套元素。我尝试了不同的FOR XML参数,但仍然无法获得正确的结果。

查询如下所示:

SELECT 
Product.ID, Product.ProductName,
    (SELECT
    Images.ProductImage AS image
    FROM Images 
    WHERE Images.ProductID = Product.ID
    FOR XML PATH ('image_list'), ELEMENTS, TYPE
    )
FROM (SELECT DISTINCT ID, ProductName FROM Product) Product
FOR XML PATH ('products'), ELEMENTS, root ('Root')

我希望得到这样的XML:

<Root>
  <products>
    <ID>1</ID>
    <ProductName>product 1</ProductName>
    <image_list>
      <image>picture1.jpg</image>
      <image>picture2.jpg</image>
      <image>picture3.jpg</image>
    </image_list>
  </products>
  <products>
    <ID>2</ID>
    <ProductName>product 2</ProductName>
    <image_list>
      <image>picture1.jpg</image>
      <image>picture2.jpg</image>
    </image_list>
  </products>
</Root>

第一部分没问题,image_list是个问题。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我解决了:) ..在大脑开始工作之后可能发布一个qustion很好:)。

我在子查询下添加AS'image_list',删除ELEMENTS和PATH名称。 就是这样。

SELECT 
Product.ID, Product.ProductName,
    (SELECT
    Images.ProductImage AS image
    FROM Images 
    WHERE Images.ProductID = Product.ID
    FOR XML PATH (''), TYPE
    ) 'image_list'
FROM (SELECT DISTINCT ID, ProductName FROM Product) Product
FOR XML PATH ('products'), ELEMENTS, root ('Root')

结果是:

<Root>
  <products>
    <ID>1</ID>
    <ProductName>product 1 </ProductName>
    <image_list>
      <image>picture1.jpg</image>
      <image>picture2.jpg</image>
      <image>picture3.jpg</image>
    </image_list>
  </products>
  <products>
    <ID>2</ID>
    <ProductName>product 2 </ProductName>
    <image_list>
      <image>picture1.jpg</image>
      <image>picture2.jpg</image>
    </image_list>
  </products>
</Root>