从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
答
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, ",")
(你可能会编辑,以适应路径表达式的开始,取决于你如何阅读你的输入)
啊,我不知道向XML添加一个字符串(“,”)将工作,并使用CTE具有相同的.nodes ()查询,然后分别执行FOR XML PATH! 非常好,谢谢。 – user984528