簡體   English   中英

T-SQL將xml字段轉換為多列表

[英]T-SQL convert xml field to multi column table

我試圖將數據從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

我希望有一個人可以幫助我。

試試這樣:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM