【发布时间】:2021-05-18 20:00:02
【问题描述】:
短版
使用 SQL Server FOR XML ROOT('Customers'),如何向该根节点添加属性?
<Customers> ← attributes here
<Customer>Ian</Customer>
<Customer>Shelby</Customer>
<Customer>Dave</Customer>
</Customers>
加长版
在 SQL Server 中使用 FOR XML 时:
SELECT *
FROM (VALUES
(122, 'All-Purpose Bike Stand'),
(119, 'Bike Wash'),
(115, 'Cable Lock')
) AS Products(ProductModelID, Name)
FOR XML PATH('Product')
它通常只返回元素:
<Product>
<ProductModelID>122</ProductModelID>
<Name>All-Purpose Bike Stand</Name>
</Product>
<Product>
<ProductModelID>119</ProductModelID>
<Name>Bike Wash</Name>
</Product>
<Product>
<ProductModelID>115</ProductModelID>
<Name>Cable Lock</Name>
</Product>
(3 rows affected)
这不是一个有效的 XML 文档,因为有 三个 顶级节点 - 而不仅仅是一个。
这可以通过指定ROOT('RootNodeName')来解决:
SELECT *
FROM (VALUES
(122, 'All-Purpose Bike Stand'),
(119, 'Bike Wash'),
(115, 'Cable Lock')
) AS Products(ProductModelID, Name)
FOR XML PATH('Product'), ROOT('Products')
<Products>
<Product>
<ProductModelID>122</ProductModelID>
<Name>All-Purpose Bike Stand</Name>
</Product>
<Product>
<ProductModelID>119</ProductModelID>
<Name>Bike Wash</Name>
</Product>
<Product>
<ProductModelID>115</ProductModelID>
<Name>Cable Lock</Name>
</Product>
</Products>
(3 rows affected)
非常好。
属性除外
以上内容很好,但是我还没有完成需要生成的 XML 文档。我需要为根节点添加一些属性:
<Products operationalMode="Test" batchDate="2021-02-15T17:36:22" formatId="8e884ace-bee4-11e4-8dfc-aa07a5b093db">
<Product>
<ProductModelID>122</ProductModelID>
<Name>All-Purpose Bike Stand</Name>
</Product>
<Product>
<ProductModelID>119</ProductModelID>
<Name>Bike Wash</Name>
</Product>
<Product>
<ProductModelID>115</ProductModelID>
<Name>Cable Lock</Name>
</Product>
</Products>
如何向XML ROOT('rootNode') 元素添加属性?
【问题讨论】:
标签: sql-server sql-server-2012 for-xml-path for-xml