本文介紹了使用 Any(,) 分隔符在單列中檢索的 XML 值 (2)的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
限時(shí)送ChatGPT賬號(hào)..
declare @x xml =
'<Detials xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Tests>
<Test Name="Test1" TotalMarks="100">95</Test>
<Test Name="Test2" TotalMarks="200">65</Test>
<Test Name="Test3" TotalMarks="150">95</Test>
<Test Name="Test4" TotalMarks="150"></Test>
</Tests>
<Tests>
<Test Name="Test1" TotalMarks="100">95</Test>
<Test Name="Test2" TotalMarks="200">65</Test>
<Test Name="Test3" TotalMarks="150">95</Test>
<Test Name="Test4" TotalMarks="150"></Test>
</Tests>
</Detials>'
當(dāng)我這樣查詢時(shí)
SELECT STUFF(
@x.query('for $a in (*:Detials/Tests/Test/@Name)
return <a>{concat(",", $a)}</a>')
.value('.', 'NVARCHAR(MAX)'),
1, 1, '') AS ListOfName
我是這樣的
名稱列表
測(cè)試 1、測(cè)試 2、測(cè)試 3、測(cè)試 4、測(cè)試 1、測(cè)試 2、測(cè)試 3、測(cè)試 4
ListofName
Test1,Test2,Test3,Test4,Test1,Test2,Test3,Test4
但是想要根據(jù) <Test> 粉碎 xml,這可以給出如下結(jié)果
But Want to shred the xml based on the <Test> Which can give the result like this below
名稱列表
測(cè)試1、測(cè)試2、測(cè)試3、測(cè)試4
測(cè)試1、測(cè)試2、測(cè)試3、測(cè)試4
ListofName
Test1,Test2,Test3,Test4
Test1,Test2,Test3,Test4
請(qǐng)?jiān)谶@里幫助我在使用 query() 和 value() 進(jìn)行字符串連接之前將原始 XML 分解為單獨(dú)的行
Please help me here to shred original XML into separate rows before string concatenation with query() and value()
提前致謝,Jayendran
Thanks in Advance ,Jayendran
推薦答案
試試這個(gè)解決方案:
declare @x xml =
'<Detials xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Tests>
<Test Name="Test1" TotalMarks="100">95</Test>
<Test Name="Test2" TotalMarks="200">65</Test>
<Test Name="Test3" TotalMarks="150">95</Test>
<Test Name="Test4" TotalMarks="150"></Test>
</Tests>
<Tests>
<Test Name="Test1" TotalMarks="100">95</Test>
<Test Name="Test2" TotalMarks="200">65</Test>
<Test Name="Test3" TotalMarks="150">95</Test>
<Test Name="Test4" TotalMarks="150"></Test>
</Tests>
</Detials>'
-- Edit 1
SELECT XmlTable.OriginalID, ROW_NUMBER() OVER(ORDER BY x.XmlCol) AS RowNum, y.ListOfName
FROM (SELECT 1 AS OriginalID, @x AS XmlCol) AS XmlTable -- Edit 2
CROSS APPLY XMLTable.XmlCol.nodes('*:Detials/Tests') AS x(XmlCol)
CROSS APPLY(
SELECT STUFF(x.XmlCol.query('for $a in (Test/@Name) return <a>{concat(",", $a)}</a>').value('.', 'NVARCHAR(MAX)'), 1, 1, '')
) AS y(ListOfName)
-- End of Edit 1
演示
這篇關(guān)于使用 Any(,) 分隔符在單列中檢索的 XML 值 (2)的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!
【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!