我收到了一个我想通过 SQL 脚本生成的 XML 文档,但我没有做过类似的事情,也找不到任何可以让我生成所需的最终 XML 的示例(而且我不确定哪种可能的方法更适合我的需要 - EXPLICIT 或 PATH 或者它是否可能)。我希望在从 SQL 生成 XML 方面有一些经验的人能够指出我正确的方向(或者告诉我我想要做的事情是不可能的,我需要用子查询来做)。
场景是我从一个表中返回产品详细信息(我宁愿不必对我需要的每个值进行子查询)。
我希望能够生成的 xml 看起来像(我无法控制这种格式):
<records>
<record>
<fields>
<field name="id">
<values>
<value>666111</value>
</values>
</field>
<field name="name">
<values>
<value>
<![CDATA[My Product Title]]>
</value>
</values>
</field>
</fields>
</record>
<record>
...
</record>
</records>
我看过的第一种方法是使用 FOR XML PATH
SELECT TOP 2
'id' AS "@name",
p.product_id as [value],
p.title
FROM products p
ORDER BY p.product_id DESC
FOR XML PATH ('field'), ROOT ('fields'), ELEMENTS;
这给了我XML:
<fields>
<field name="id">
<value>20624</value>
<title>test154</title>
</field>
<field name="id">
<value>20623</value>
<title>test153</title>
</field>
</fields>
这给了我需要的'',但我无法指定下一个元素所需的布局。
我还研究了 FOR XML EXPLICIT
SELECT TOP 2
1 AS Tag, NULL AS Parent,
p.product_id AS [record!1!product_id!ELEMENT],
NULL AS [values!2!value!ELEMENT]
FROM products p
UNION ALL
SELECT TOP 2
2, 1,
p.product_id,
p.title
FROM products p
ORDER BY [record!1!product_id!ELEMENT] DESC
FOR XML EXPLICIT;
这给了我以下 XML:
<record>
<product_id>20624</product_id>
<values>
<value>test154</value>
</values>
</record>
<record>
<product_id>20623</product_id>
<values>
<value>test153</value>
</values>
</record>
我在能够建立请求或获得正确的东西时有点迷失(而且我认为我在一次查找中尝试做太多事情,这就是我的问题的原因)。感谢您提供任何帮助-即使它为我指出了一个很好的指南(我发现的唯一示例在示例方面非常糟糕-它们没有显示您如何构建/更改它们的微妙之处)