从SQL Server 2005获取一个带有分隔符的字符串XQuery

问题描述:

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

我:

<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字符串,但认为有一个直接的方法。

谢谢。

这个怎么样 - 这将在一个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 
+0

啊,我不知道向XML添加一个字符串(“,”)将工作,并使用CTE具有相同的.nodes ()查询,然后分别执行FOR XML PATH! 非常好,谢谢。 – user984528

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

如何

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

(你可能会编辑,以适应路径表达式的开始,取决于你如何阅读你的输入)