从 SQL Server 列中获取 XML 节点作为逗号分隔列表

问题描述:

我有一个数据存储在 xml 列中,需要一个逗号分隔的子节点列表.使用下面的脚本,我只能得到A B C".请帮助我使用 xquery 获取A、B、C"(简单地用逗号替换空格无济于事,因为我们的数据里面有空格).

I have a data stored in a xml column and need a comma-separated list of child nodes. Using script below, I can only get "A B C". Please help me get "A,B,C" using xquery (Simple replace of space with comma does not help because we have data with spaces inside).

create table Temp12345 (col1 xml)
go

insert into Temp12345 (col1)
values('<fd><field i="22"><v>A</v><v>B</v><v>C</v></field></fd>')
go

select col1.value('(/fd/field[@i=22])[1] ', 'NVarchar(Max)') 
from Temp12345
go

drop table Temp12345
go

试试这个:

SELECT
    STUFF((SELECT 
              ',' + fd.v.value('(.)[1]', 'varchar(10)')
           FROM 
              Temp12345
           CROSS APPLY
              col1.nodes('/fd/field/v') AS fd(v)
           FOR XML PATH('')
          ), 1, 1, '')

这给了我 A,B,C - 它也适合你吗?

This gives me A,B,C - does it work for you, too?