T-Sql

使用 SQL 查詢 XML 節點

  • January 10, 2020

我想我快到了,但已經陷入僵局!

我有一個相對簡單的 XML 結構,我需要將其解析為 SQL 結果集,但似乎無法使其工作。

這是程式碼:

DECLARE @xml XML;
SET @xml = '
<values>
   <Nationality>
       <item>
           <key>UK</key>
           <value>def</value>
       </item>
       <item>
           <key>IE</key>
           <value>def</value>
       </item>
   </Nationality>
   <Currency>
       <item>
           <key>GBP</key>
           <value>123</value>
       </item>
       <item>
           <key>EUR</key>
           <value>345</value>
       </item>
   </Currency>
</values>';

select I.X.value('(/key/text())[1]', 'int') as ItemID,
      I.X.value('(/value/text())[1]', 'int') as Store
from @XML.nodes('/values/Nationality') as O(X)
cross apply O.X.nodes('/item') as I(X);

本質上,我想從國籍中提取價值:

Key  | Value
-------------
UK   | Def
IE   | Def

我可能想稍後再做貨幣,但我認為如果我破解了上述問題,那麼剩下的就足夠簡單了。

你能幫忙嗎?

根據您的輸入數據,我將執行以下操作:

select I.X.value('(key/text())[1]', 'varchar(50)') as ItemID,
      I.X.value('(value/text())[1]', 'varchar(50)') as Store
from @XML.nodes('values/Nationality') as O(X)
 cross apply O.X.nodes('item') as I(X);

輸出

ItemID  Store
UK  def
IE  def

引用自:https://dba.stackexchange.com/questions/257087