<a>
<b>111</b>
<c>AAA</c>
<b>222</b>
<c>BBB</c>
<b>333</b>
<c>CCC</c>
</a>
上述值可在 SQL Server 的 XML 型別列中找到。
我想找到位于節點之后的節點的值,其值為“111”。這可以使用 XQuery 完成嗎?
到目前為止,我有:
SELECT X.Y.value('('b[.="111"])[1]', 'varchar(10)') AS 'MyColumn'
FROM DBTable
CROSS APPLY DocXml.nodes('/a') AS X(Y);
這讓我獲得了第一個節點,但我無法獲得兄弟節點。
uj5u.com熱心網友回復:
不幸的是,SQL Server 不支持同級軸,這會使這變得更簡單。
相反,您需要執行以下操作
b使用將節點保存到變數中let- 使用 取根節點的所有節點,
*通過檢查每個節點是否跟隨進行過濾b,回傳第一個節點。 - 請注意,您應該使用
text()來獲取節點的內部文本,而不是依賴隱式轉換。
SELECT
x1.a.value('let $b := b[text() = "111"][1] return (*[. >> $b]/text())[1]','varchar(100)')
FROM DBTable t
CROSS APPLY t.DocXml.nodes('/a') x1(a);
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/455695.html
標籤:sql服务器 tsql 查询 sql-server-2016 sqlxml
