久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

從 xml 數據中獲取逗號分隔值

get comma separated values from xml data(從 xml 數據中獲取逗號分隔值)
本文介紹了從 xml 數據中獲取逗號分隔值的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我知道如何在最簡單的情況下做到這一點,例如

I know how to do it in the simplest scenario, e.g.

DECLARE @commaSeparatedValues NVARCHAR(MAX)
DECLARE @xml XML = N'<id>1</id>
<name>test</name>
<istest>1</istest>'

;WITH nodes AS 
(
    SELECT Tbl.Col.value('.', 'nvarchar(max)') as Value
    FROM @xml.nodes('*/text()') Tbl(Col)
),
prepareStrings
AS
(
    SELECT IIF(ISNUMERIC(n.value) = 1, n.Value, '''' + n.Value + '''') AS Value
    FROM nodes n
)
SELECT @commaSeparatedValues = CASE WHEN @commaSeparatedValues IS NULL THEN s.Value ELSE @commaSeparatedValues + ',' + s.value END
FROM prepareStrings s

SELECT @commaSeparatedValues as csv

這完美地工作.當我想以這種方式解析以下 xml 數據時出現問題.我在編寫正確的查詢時遇到問題.

This works perfectly. Problem arises when I want to parse this way the following xml data. I have problems with writing the proper query.

DECLARE @xml XML = N'
<e>
  <id>1</id>
  <name>test</name>
  <istest>1</istest>
</e>
<e>
  <id>2</id>
  <name>test2</name>
  <istest>0</istest>
</e>
'

我可以通過使用逐行獲取元素

I can get the elements row by row by using

select Tbl.col.query('.') as [xml]
from @xml.nodes('e') Tbl(col)

我不知道如何向前推進.不知道如何使用這個查詢,現在查詢 [xml] 列.

What I don't know is how to move forward with this. Don't know how to use this query and now querying the [xml] column.

推薦答案

請嘗試下面的 SQL 查詢

Please try the below SQL query

DECLARE @commaSeparatedValues NVARCHAR(MAX)
DECLARE @xml XML = N'
<e>
  <id>1</id>
  <name>test1</name>
  <istest>1</istest>
</e>
<e>
  <id>2</id>
  <name>test2</name>
  <istest>2</istest>
</e>
'

;with cte as (
    select 
        rownr = ROW_NUMBER() over (order by @commaSeparatedValues),
        Tbl.col.query('.') as [xml]
    from @xml.nodes('e') Tbl(col)
), cols as (
    select
        rownr,
        Tbl.Col.value('.', 'nvarchar(max)') as Value
    from cte
    cross apply cte.xml.nodes('//text()') Tbl(Col)
)
select distinct 
     STUFF((
       SELECT ',' + IIF(ISNUMERIC(value) = 1, Value, '''' + Value + '''')
       FROM cols SSF WHERE SSF.rownr = S.rownr
       FOR XML PATH(''),TYPE
       ).value('.','VARCHAR(MAX)'
     ), 1, 1, '')
    from cols S

我使用 SQL row_number()作用對記錄進行編號,區分列值時區分列值(第二個CTE使用Partition By子句對行數據中的列進行排序)

I use SQL row_number() function to number records and distinguish column values when they are separated into values (the second CTE uses Partition By clause to sort columns among row data)

然后我使用 SQL 字符串連接 使用 XML PATH() 的方法

Then I concatenate string values into comma separated string using SQL string concatenation method with using XML PATH()

希望能幫到你

這篇關于從 xml 數據中獲取逗號分隔值的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創建視圖?)
Create calculated value based on calculated value inside previous row(根據前一行內的計算值創建計算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 久久久久黑人 | 天天宗合网 | 91久久国产综合久久91精品网站 | 国产最好的av国产大片 | 久久久精品一区二区三区 | 午夜一区二区三区在线观看 | 亚洲成人午夜电影 | 精品自拍视频在线观看 | 美女午夜影院 | 亚洲一区二区视频 | 国产精品国产a级 | 欧美4p | 成人免费视频在线观看 | 99精品国产一区二区青青牛奶 | 国产农村妇女毛片精品久久麻豆 | 九九99久久| 亚洲一区二区成人 | 99re国产| 青青艹在线视频 | 婷婷丁香在线视频 | 亚洲人成人一区二区在线观看 | 在线国产视频 | 欧美日韩综合精品 | 亚洲国产看片 | 91在线网| 亚洲国产成人精品女人久久久 | 一区二区三区久久 | 欧美午夜精品 | 国产一级一级毛片 | 日韩专区中文字幕 | 日韩精品一区二 | 久久精品国产a三级三级三级 | 男女羞羞视频在线 | 免费观看羞羞视频网站 | 国产精品美女久久久久久免费 | 狠狠色综合久久丁香婷婷 | 色综合网站 | 欧美成人精品激情在线观看 | 国产日韩一区二区三区 | 麻豆久久精品 | www精品美女久久久tv |