2016-06-27 15 views
1

xmlフィールドのデータをテーブルに変換しようとしています。私はこのウェブサイト上で複数のソリューションを見つけましたが、私の必要なものを正確に教えてくれるものはありません。 XMLは次のようになります。xmlフィールドからマルチカラムテーブルに変換する

<table> 
    <id>{100}</id> 
    <rows> 
    <row> 
     <columns> 
     <column name="cur" value="EUR" type="System.String" /> 
     <column name="item" value="Item a" type="System.String" /> 
     <column name="price" value="2.5" type="System.Decimal" /> 
     <column name="qty" value="20" type="System.Int32" /> 
     <column name="Key" value="1" type="System.Int32" /> 
     </columns> 
    </row> 
    <row> 
     <columns> 
     <column name="cur" value="EUR" type="System.String" /> 
     <column name="item" value="Item b" type="System.String" /> 
     <column name="price" value="30" type="System.Decimal" /> 
     <column name="qty" value="30" type="System.Int32" /> 
     <column name="Key" value="2" type="System.Int32" /> 
     </columns> 
    </row> 
    </rows> 
    <key>Key</key> 
</table> 

私はこのように見える結果を希望:

id key cur item price qty 
100 1 EUR Item a 2.5 20 
100 2 EUR Item b 30  30 

は私が誰かが私を助けることができると思います。

+0

'' xml'データ型のnodes'方法は、あなたが探しているものです。 https://msdn.microsoft.com/en-us/library/ms188282.aspx –

答えて

0

このようにそれを試してみてください。

DECLARE @x XML= 
'<table> 
    <id>{100}</id> 
    <rows> 
    <row> 
     <columns> 
     <column name="cur" value="EUR" type="System.String" /> 
     <column name="item" value="Item a" type="System.String" /> 
     <column name="price" value="2.5" type="System.Decimal" /> 
     <column name="qty" value="20" type="System.Int32" /> 
     <column name="Key" value="1" type="System.Int32" /> 
     </columns> 
    </row> 
    <row> 
     <columns> 
     <column name="cur" value="EUR" type="System.String" /> 
     <column name="item" value="Item b" type="System.String" /> 
     <column name="price" value="30" type="System.Decimal" /> 
     <column name="qty" value="30" type="System.Int32" /> 
     <column name="Key" value="2" type="System.Int32" /> 
     </columns> 
    </row> 
    </rows> 
    <key>Key</key> 
</table>'; 
SELECT @x.value('(/table/id)[1]','varchar(max)') AS id --are the curly brackets there on purpose? 
     ,Rw.value('(columns/column[@name="Key"]/@value)[1]','int') AS [key] 
     ,Rw.value('(columns/column[@name="cur"]/@value)[1]','varchar(max)') AS cur 
     ,Rw.value('(columns/column[@name="item"]/@value)[1]','varchar(max)') AS item 
     ,Rw.value('(columns/column[@name="price"]/@value)[1]','decimal(10,4)') AS price 
     ,Rw.value('(columns/column[@name="qty"]/@value)[1]','int') AS qty 
FROM @x.nodes('/table/rows/row') AS A(Rw) 
+0

ありがとうございます!それはうまくいった。 PS。中かっこはxmlを生成するシステムによってそこに置かれますが、その理由はわかりません。 – Sabine

関連する問題