【发布时间】:2016-02-24 20:49:14
【问题描述】:
我有一个以下格式的 XML 文件。并非每个字段名称都有一个值。除了 id 字段之外的每个字段都是 varchar(40)。
<index>
<doc id="0">
<field name="MFG">
<val>ACME</val>
</field>
<field name="InternalCode">
<val />
</field>
<field name="partnumber">
<val>012345-00</val>
</field>
<field name="partdescription">
<val>PIN</val>
</field>
</doc>
<doc id="1">
<field name="MFG">
<val />
</field>
<field name="InternalCode">
<val>ABCDE</val>
</field>
<field name="partnumber">
<val>919-555-7Z</val>
</field>
<field name="partdescription">
<val>WASHER</val>
</field>
</doc>
<doc id="2">
<field name="MFG">
<val>YOUR COMPANY</val>
</field>
<field name="InternalCode">
<val />
</field>
<field name="partnumber">
<val>131415</val>
</field>
<field name="partdescription">
<val>BOLT</val>
</field>
</doc>
</index>
我想做的是读取 XML 并以以下方式在 SQL 中填充表。
换句话说,在 rowid 之后,将其余属性作为列,并将它们的值作为列值。我正在使用以下代码将 rowid、属性及其值列为行。
SELECT XMLAttribute.rowid, XMLAttribute.name, XMLAttribute.val
FROM OPENXML (@hdoc, 'index/doc/field', 2 )
WITH (rowid int '../@id',
name VARCHAR(128) '@name',
val varchar(128) 'val'
) AS XMLAttribute
可以这样做(在 rowid 之后旋转)吗?如果有,怎么做?
【问题讨论】:
标签: sql-server xml pivot