2016-02-25 63 views
-1

我以前从来没有在SQL Server中实际遇到过XML - 我猜 - 我迷上了 - 现在我正在引导。有没有办法查询这些列并返回结果,就好像它们是单独的行一样?将SQL Server列中的XML解码为输出中的行

这里的数据在其中一列一列的一个例子...

<X C="0" I="1"> 
    <E D="1Y0M0W0D" P="0" A="0" /> 
    <E D="1Y0M0W0D" P="0" A="0.03" /> 
    <E D="1Y0M0W0D" P="0" A="0.03" /> 
    <E D="1Y0M0W0D" P="0" A="0.03" /> 
</X> 

我希望得到的东西的影响:

row1col1 row1col2 "1Y0M0W0D" "0" "0" 
row1col1 row1col2 "1Y0M0W0D" "0" "0.03" 
row1col1 row1col2 "1Y0M0W0D" "0" "0.03" 

回答

1

你可以使用SQL中的XML.nodes(...)作为记录集来访问XML。如果数据是列而不是变量,则使用CROSS APPLY [column].nodes(...)

DECLARE @xml XML = N' 
<X C="0" I="1"> 
    <E D="1Y0M0W0D" P="0" A="0" /> 
    <E D="1Y0M0W0D" P="0" A="0.03" /> 
    <E D="1Y0M0W0D" P="0" A="0.03" /> 
    <E D="1Y0M0W0D" P="0" A="0.03" /> 
</X> 
'; 

SELECT 
    x.e.value('../@C', 'NVARCHAR(10)') AS [C] 
    ,x.e.value('../@I', 'NVARCHAR(10)') AS [I] 
    ,x.e.value('@D', 'NVARCHAR(10)') AS [D] 
    ,x.e.value('@P', 'INT') AS [P] 
    ,x.e.value('@A', 'FLOAT') AS [A] 
FROM @xml.nodes('/X/E') x(e) 
+0

非常棒。你为我节省了大量的谷歌搜索。不是我介意用谷歌搜索,但你知道... –