SQL 将具有相同节点的 XML 转换为数据集

标签 sql sql-server xml t-sql

我有一个节点名称相同的 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/

相关文章:

sql-server - 'AvayaSBCCRT' 附近的语法不正确

java - 使用 java 编辑 XML 实体的链接

java - XML DAO 示例

mysql - 如何使用group by实现串联

sql-server - 使用 T-SQL 查询文件系统文件夹

xml - 如何使用 Scala 创建 xhtml 查询字符串?

php - 如何同时从两个数据库表中获取信息? (MySQL)

sql - Rails 在 ActiveRecord::Relation 中使用 OR 进行搜索

mysql - 使用 Ruby on Rails 进行安全/更好的 SQL 查询

MySQL如何填充范围内缺失的日期?