2017-11-10 10 views
0

XMLファイルの下にSQLテーブルにインポートしたい。XMLをSQL Server 2008R2テーブルに変換する

<table> 
    <id>{72cbb5ab-dbb3-4de7-9010-5dd1192a1851}</id> 
    <rows> 
    <row> 
     <columns> 
     <column name="itemcode" value="0984-22-301" type="System.String" /> 
     <column name="date" value="08-November-2017" type="System.DateTime" /> 
     <column name="amount" value="10" type="System.Decimal" /> 
     <column name="DefaultKey" value="1" type="System.Int32" /> 
     </columns> 
    </row> 
    <row> 
     <columns> 
     <column name="itemcode" value="0984-33-101" type="System.String" /> 
     <column name="date" value="08-November-2017" type="System.DateTime" /> 
     <column name="amount" value="11" type="System.Decimal" /> 
     <column name="DefaultKey" value="2" type="System.Int32" /> 
     </columns> 
    </row> 
    </rows> 
    <key>DefaultKey</key> 
    <total>0</total> 
    <data /> 
    <parameters /> 
</table> 

id、itemcode、date、amountの列を持つSQLテーブルのように見えます。

クエリはどのように表示されますか?

+0

ありがとうございました。その投稿に基づいて、私は自分の問題を解決するための正しいクエリを作成しました。 – jeuris

答えて

0

解決済み

declare @xmltable table (data xml) 
insert into @xmltable (data) 
select DATA from [MyData]..myxml 


SELECT 
    LineId = c.value('id[1]', 'nvarchar(max)'), 

    ColumnItemCode = l.value('(columns/column[@name="itemcode"]/@value)[1]', 'varchar(20)'), 
    ColumnDate = l.value('(columns/column[@name="date"]/@value)[1]', 'varchar(20)'), 
    ColumnAmount = l.value('(columns/column[@name="amount"]/@value)[1]', 'varchar(20)') 
FROM 
    @xmltable x 
    CROSS APPLY data.nodes('table') t(c) 
    CROSS APPLY data.nodes('table/rows/row') b(l) 

これは、の結果:あなたの助けのための

LineId         ColumnItemCode ColumnDate ColumnAmount 
{72cbb5ab-dbb3-4de7-9010-5dd1192a1851} 0984-22-301  08-November-2017 10 
{72cbb5ab-dbb3-4de7-9010-5dd1192a1851} 0984-33-101  08-November-2017 11 

感謝。

関連する問題