我有一个数据存储在其中的字段,其中包含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
答案 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)
参考文献:
nodes() Method (xml Data Type)