簡體   English   中英

檢索多個xml子節點值

[英]Retrieving multiple xml child node values

我有一列varchar(max)類型的列,其中填充了xml節點和值; 例如,列數據以<tag1> <tag2>value1</tag2><tag3>value2</tag3>... </tag1> 我需要從該字符串中獲取的是使用靜態SQL或存儲過程在表中每一行的一個單元格中的“ value1 value2 value3 ... valueN”。 節點樹並不總是相同的,有時路徑是<tagX><tagY>valueY</tagY>...</tagX>

我使用xml切碎的所有經驗僅用於獲取一個特定的值,屬性或標記,而不是在保留列和行數的同時獲取所有值。 目前,我查詢然后在產品末端遍歷結果集並切細所有內容,但是由於最近的更改,這不再是一個選擇。

可以將列更改為xml類型,但是如果可能的話,我希望避免這樣做。

將列轉換為XML(或將表中的列更改為XML),然后將XML切碎到//*以獲取表中的所有節點。 然后,您可以使用for xml path將這些值重新連接在一起。

select (
       select ' '+X.N.value('text()[1]', 'varchar(max)')
       from (select cast(T.XMLCol as xml)) as T1(XMLCol)
         cross apply T1.XMLCol.nodes('//*') as X(N)
       for xml path(''), type
       ).value('substring(text()[1], 2)', 'varchar(max)')
from T

SQL小提琴

暫無
暫無

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

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