SQL XML查询:提取节点值及子节点CSV格式值求助
从XML提取节点值并将子节点转为CSV格式
你的SQL无法正确获取子节点的原因有两个:
- 使用了绝对路径
/SynonymList/uytfu/*,而应该用相对于当前Disorder节点的相对路径 - 路径中包含无效节点名
uytfu,实际子节点是SynonymList/Synonym
以下是修正后的SQL语句:
declare @x XML = (select * from OPENROWSET(bulk 'C:\SQLBulkLoad\OrphaNet\XML\OrphaTable\en_product1_Small.xml', single_blob) as T (MY_XML)); select item.value('(OrphaCode)[1]', 'NVARCHAR(MAX)') as OrphaCode, STUFF(( SELECT ',' + x.value('.', 'NVARCHAR(MAX)') FROM item.nodes('SynonymList/Synonym') AS y(x) FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS Symptoms FROM @x.nodes('JDBOR/DisorderList/Disorder') AS items(item);
关键修改说明:
- 提取
OrphaCode时直接使用value()方法,比query().value()更简洁高效 - 子查询中改用相对路径
SynonymList/Synonym定位同义词节点 - 添加
TYPE关键字并二次调用value(),避免特殊字符被XML转义(如&、<等)
执行结果:
| OrphaCode | Symptoms |
|---|---|
| 585 | Austin disease,MSD,Mucosulfatidosis |
| 118 | Beta-mannosidase deficiency |
内容的提问来源于stack exchange,提问作者EldritchText
相关产品推荐
相关产品推荐

