Sql-Server

XQquery 用於 XML 中所有特定元素的特定屬性

  • June 26, 2019

我正在尋找一個查詢以從以下範例 XML 中獲取元素“PRODUCT”的所有屬性值“NetAmount”:

<ROOT>
<CATEGORY name="A">
 <PRODUCT NetAmount="10.50"/>
 <PRODUCT NetAmount="20.50"/>
</CATEGORY>
<CATEGORY name="B">
 <PRODUCT NetAmount="30.50"/>
 <PRODUCT NetAmount="40.50"/>
 <PRODUCT NetAmount="75.50"/>
</CATEGORY>
</ROOT>

對於我的場景,XML 是儲存在表還是變數中都沒有關係。

我嘗試了幾種不同的方法,但都失敗了。

樣本:

SELECT 
 NetAmount.value('(@NetAmount)[1])','varchar(250)') AS Products
FROM 
 @x.nodes('//ROOT/Category/Product') 
   AS P(NetAmount)

我通常會收到以下對我來說毫無意義的錯誤消息:

消息 2370,級別 16,狀態 1,行 5 XQuery

$$ value() $$:在 XQuery 表達式的末尾不再需要標記。成立: ‘)’。

差不多明白了:

select
   d.lin.value('./@NetAmount', 'decimal(10,2)') as Amount
from
   t
cross apply
   data.nodes('ROOT/CATEGORY/PRODUCT') as d(lin);
| 金額 |
| :----- |
| 10.50 |
| 20.50 |
| 30.50 |
| 40.50 |
| 75.50 |

db<>在這裡擺弄

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