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

时间:2011-10-07 20:17:50

标签: sql-server-2005 xquery

我似乎无法仅使用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的字符串,但我认为有直接的方法。

谢谢。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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)')

答案 2 :(得分:0)

怎么样

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

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