У меня есть XML-файл в следующем формате. Не каждое имя поля будет иметь значение. Каждое поле, за исключением поля id, будет varchar (40).Pivot XML в SQL Columns & values
<index>
<doc id="0">
<field name="MFG">
<val>ACME</val>
</field>
<field name="InternalCode">
<val />
</field>
<field name="partnumber">
<val>-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)? Если да, то как?