2016-02-25 26 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

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