从xml数据类型字段中提取数据

时间:2013-01-21 11:33:43

标签: xml tsql types field record

我有一个数据存储在其中的字段,其中包含xml数据类型值:

<Inning xmlns="" ID="2866433" Company="Hamfekran">
    <Test ID="rs232lon">
        <Param Name="corel" Value="0.00000" />
        <Param Name="co2rel" Value="10.8000" />
        <Param Name="hcrel" Value="111.000" />
        <Param Name="o2rel" Value="0.95000" />
    </Test>   
    <Test ID="9" Name="CustomData">
        <param Name="TireFront" Value="3.00" />
        <param Name="TireBack" Value="2.00" />
    </Test>
</Inning>

我怎么能用这样的TSQL得到结果:

corel       co2rel        hcrel        o2rel     TireFront      TireBack
-----------------------------------------------------------------------------       
0.00000     10.8000       111.000     0.95000       3.00          2.00

1 个答案:

答案 0 :(得分:0)

DECLARE @CocoJambo TABLE (
    ID INT IDENTITY PRIMARY KEY,
    XmlColumn XML NOT NULL
);

INSERT  @CocoJambo (XmlColumn)
VALUES  (N'<Inning xmlns="" ID="2866433" Company="Hamfekran">
    <Test ID="rs232lon">
        <Param Name="corel" Value="0.00000" />
        <Param Name="co2rel" Value="10.8000" />
        <Param Name="hcrel" Value="111.000" />
        <Param Name="o2rel" Value="0.95000" />
    </Test>   
    <Test ID="9" Name="CustomData">
        <param Name="TireFront" Value="3.00" />
        <param Name="TireBack" Value="2.00" />
    </Test>
</Inning>');

SELECT  a.*,
        b.c.value('(Test[@ID="rs232lon"]/Param[@Name="corel"]/@Value)[1]','NUMERIC(38,5)') AS corel,
        b.c.value('(Test[@ID="rs232lon"]/Param[@Name="co2rel"]/@Value)[1]','NUMERIC(38,5)') AS co2rel,
        b.c.value('(Test[@ID="rs232lon"]/Param[@Name="hcrel"]/@Value)[1]','NUMERIC(38,5)') AS hcrel,
        b.c.value('(Test[@ID="rs232lon"]/Param[@Name="o2rel"]/@Value)[1]','NUMERIC(38,5)') AS o2rel,

        b.c.value('(Test[@ID="9"]/param[@Name="TireFront"]/@Value)[1]','NUMERIC(38,5)') AS TireFront,
        b.c.value('(Test[@ID="9"]/param[@Name="TireBack"]/@Value)[1]','NUMERIC(38,5)') AS TireBack
FROM    @CocoJambo a
CROSS APPLY a.XmlColumn.nodes('/Inning') AS b(c)

参考文献:

The XML Methods in SQL Server

nodes() Method (xml Data Type)

value() Method (xml Data Type)

xml Data Type Methods