0

我在 SQL Server 中有一个名为 [QueryResult] 的表,其中包含 Init 类型、XML 类型的列。

这是 Result 列数据的示例 XML。

<OUTPUT>
<item>
    <VALUE001>2023038.09</VALUE001>
    <VALUE002>265127.97</VALUE002>
    <VALUE003>459868.86</VALUE003>
    <VALUE004>16000.01</VALUE004>
    <VALUE005>552010.15</VALUE005>
    <VALUE006>21404.96</VALUE006>
<item>
<item>
    <VALUE001>15655501.89</VALUE001>
    <VALUE002>17172.50</VALUE002>
    <VALUE003>8345.31</VALUE003>
    <VALUE004>-117264374.12</VALUE004>
    <VALUE005>-160893.48</VALUE005>
</item>
</OUTPUT>

我需要一个返回输出的查询,如下所示:

id      Element          Value
-----------------------------------
1   VALUE001     2023038.09
2   VALUE001    2023038.09
3   VALUE002    265127.97
4   VALUE003    459868.86
5   VALUE004    16000.01
6   VALUE005    552010.15 
7   VALUE006    21404.96
8   VALUE001    15655501.89
9   VALUE002    17172.50
10  VALUE003    8345.31
11  VALUE004    -117264374.12
12  VALUE005    -160893.48

如果您不清楚这个问题,请告诉我?

4

1 回答 1

1

这是一个解决方案:

DECLARE @xml XML = 
'
<OUTPUT>
<item>
    <VALUE001>2023038.09</VALUE001>
    <VALUE002>265127.97</VALUE002>
    <VALUE003>459868.86</VALUE003>
    <VALUE004>16000.01</VALUE004>
    <VALUE005>552010.15</VALUE005>
    <VALUE006>21404.96</VALUE006>
</item>
<item>
    <VALUE001>15655501.89</VALUE001>
    <VALUE002>17172.50</VALUE002>
    <VALUE003>8345.31</VALUE003>
    <VALUE004>-117264374.12</VALUE004>
    <VALUE005>-160893.48</VALUE005>
</item>
</OUTPUT>
'

SELECT  T.c.value('local-name(.)[1]', 'varchar(100)') AS Element,
        T.c.value('./text()[1]', 'decimal(17,2)') AS Value
FROM   @xml.nodes('//item/child::node()') T(c);

返回节点的序数位置比看起来要困难得多。这个问题提出了一个解决方案,但我没有在这里实现它,因为它有点像黑客。

于 2011-07-22T12:54:45.700 回答