使用 SQL Server 2005 XQuery 从 XML 获取分隔字符串

发布于 2024-12-09 03:36:48 字数 524 浏览 2 评论 0原文

我似乎无法仅使用 SQL Server 2005 XQuery 从 XML 文档中获取以 [逗号] 分隔的字符串。

我有:

<AAA>
  <Name>Name_A</Name>
  <Value>Val_A</Value>
</AAA>
<AAA>
  <Name>Name_B</Name>
  <Value>Val_B</Value>
</AAA>
<AAA>
  <Name>Name_C</Name>
  <Value>Val_C</Value>
</AAA>
... (etc.)

... 并且想要获取 Val_A,Val_B,Val_C... - 逗号分隔的字符串。

我可以转换为表格,然后使用 FOR XML 转换回字符串,但我认为有一种直接的方法。

谢谢。

I cannot seem to get a [comma-]delimited string out of an XML doc using just SQL Server 2005 XQuery.

I have:

<AAA>
  <Name>Name_A</Name>
  <Value>Val_A</Value>
</AAA>
<AAA>
  <Name>Name_B</Name>
  <Value>Val_B</Value>
</AAA>
<AAA>
  <Name>Name_C</Name>
  <Value>Val_C</Value>
</AAA>
... (etc.)

... and would like to get Val_A,Val_B,Val_C... - a comma-delimited string.

I can convert to a table then back to string with FOR XML, but thought there is a direct way.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

囚你心 2024-12-16 03:36:48

怎么样 - 这适用于 XML 变量中任意数量的 节点:

DECLARE @Input XML = '<AAA>
  <Name>Name_A</Name>
  <Value>Val_A</Value>
</AAA>
<AAA>
  <Name>Name_B</Name>
  <Value>Val_B</Value>
</AAA>
<AAA>
  <Name>Name_C</Name>
  <Value>Val_C</Value>
</AAA>'

SELECT
    STUFF(
    (SELECT 
        ',' + AAA.value('(Value)[1]', 'varchar(20)')
     FROM
        @Input.nodes('/AAA') AS Node(AAA)
     FOR XML PATH('')
    ), 1, 1, '')

输出为:

Val_A,Val_B,Val_C

How about this - this will work for any number of <AAA> nodes in an XML variable:

DECLARE @Input XML = '<AAA>
  <Name>Name_A</Name>
  <Value>Val_A</Value>
</AAA>
<AAA>
  <Name>Name_B</Name>
  <Value>Val_B</Value>
</AAA>
<AAA>
  <Name>Name_C</Name>
  <Value>Val_C</Value>
</AAA>'

SELECT
    STUFF(
    (SELECT 
        ',' + AAA.value('(Value)[1]', 'varchar(20)')
     FROM
        @Input.nodes('/AAA') AS Node(AAA)
     FOR XML PATH('')
    ), 1, 1, '')

Output is:

Val_A,Val_B,Val_C
梦幻的心爱 2024-12-16 03:36:48
declare @xml xml = '
<AAA>
  <Name>Name_A</Name>
  <Value>Val_A</Value>
</AAA>
<AAA>
  <Name>Name_B</Name>
  <Value>Val_B</Value>
</AAA>
<AAA>
  <Name>Name_C</Name>
  <Value>Val_C</Value>
</AAA>
'

select @xml.value('(/AAA[1]/Value)[1]', 'varchar(10)')+','+
       @xml.value('(/AAA[2]/Value)[1]', 'varchar(10)')+','+
       @xml.value('(/AAA[3]/Value)[1]', 'varchar(10)')
declare @xml xml = '
<AAA>
  <Name>Name_A</Name>
  <Value>Val_A</Value>
</AAA>
<AAA>
  <Name>Name_B</Name>
  <Value>Val_B</Value>
</AAA>
<AAA>
  <Name>Name_C</Name>
  <Value>Val_C</Value>
</AAA>
'

select @xml.value('(/AAA[1]/Value)[1]', 'varchar(10)')+','+
       @xml.value('(/AAA[2]/Value)[1]', 'varchar(10)')+','+
       @xml.value('(/AAA[3]/Value)[1]', 'varchar(10)')
从来不烧饼 2024-12-16 03:36:48

怎么样

string-join(/AAA/Value, ",")

(您可能需要根据您读取输入的方式来调整路径表达式的开头)

How about

string-join(/AAA/Value, ",")

(You might need to adapt the beginning of the Path expression depending on how you read your input)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文