我有一个节点名称相同的 XML 列。
这就是 XML 列的样子。它具有三个 Mapping
节点。
<Mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Mapping>
<ID>1</ID>
<Name>John</Name>
</Mapping>
<Mapping>
<ID>2</ID>
<Name>Jill</Name>
</Mapping>
<Mapping>
<ID>3</ID>
<Name>Jason</Name>
</Mapping>
</Mappings>
预期结果集
ID Name
------------------------
1 John
2 Jill
3 Jason
这是我尝试过的
select
convert(varchar(50), ID.query('./text()')) as ID,
convert(varchar(50), fName.query('./text()')) as [Name]
from [MyTable]
cross apply XMLCol.nodes('/Mappings/Mapping/ID') as map1(ID)
cross apply XMLCol.nodes('/Mappings/Mapping/Name') as map2(fName)
这将 ID 与所有 3 个名称重复 3 次。
我只想将 ID 与相应的名称重复一次。
最佳答案
你很接近。尝试一下
示例
Select ID = xAttr.value('ID[1]', 'int')
,[Name] = xAttr.value('Name[1]', 'varchar(100)')
From YourTable A
Cross Apply XMLCol.nodes('/Mappings/Mapping') B(xAttr)
返回
ID Name
1 John
2 Jill
3 Jason
关于SQL 将具有相同节点的 XML 转换为数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56484567/