繁体   English   中英

如何从 T-SQL 中的 XML 列中获取以逗号分隔的字符串列表?

[英]How do I get a comma-delimited list of strings from an XML column in T-SQL?

假设有一个包含两列的表 (SQL Server 2019)。 两者都是 nvarchar 但ResultDoc列恰好存储 xml。 示例数据:

姓名 结果文档
山姆 <doc><results><result>a</result><result>b</result><result>x</result></results></doc>
<doc><results><result>c</result><result type="pending">z</result><result>m</result><result>k</result></results></doc>

我希望能够查询此表,过滤 xml,并获得如下结果:

姓名 结果
山姆 一,乙,X
c, 米, k

我已经看到对单个文档执行此操作的示例,但是我无法将这样的解决方案应用于对多行执行此操作的查询。

更新...将聚合移到 OUTER APPLY

由于您是 2019 年,您可以使用string_agg()

示例或dbFiddle

Select A.Name
      ,C.Results
 From  YourTable A
 Outer Apply ( values (try_convert(xml,[ResultDoc]) ) )B(xmlData)
 Outer Apply (
                Select Results = string_Agg(xn.value('./text()[1]', 'nvarchar(150)'),',')
                 From xmlData.nodes('doc/results/result') C(xn)
                 Where coalesce(xn.value('@type[1]', 'nvarchar(150)'),'') not in ('pending')
              ) C

结果

Name    Results
Jan     c,m,k
Sam     a,b,x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM