我似乎无法仅使用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的字符串,但我认为有直接的方法。
谢谢。
答案 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表达式的开头)