mysql - 将 XML 读入 SQL 表

标签 mysql sql-server xml rdbms

我正在读取 xml 并将其写入 sql 表

想把下面的xml插入到表中

Declare @MainXml XML =
'<Parent>
  <Root>
      <Admin>admin1</Admin>
      <Data number="1">
        <Type value="100"></Type>
        <Type value="200"></Type>
     </Data>        
  </Root>
 <Root>
     <Admin>admin2</Admin>
     <Data number="1">
       <Type value="300"></Type>
       <Type value="400"></Type>
     </Data>
 </Root>
</Parent>'

I am trying to insert into table like this

Insert Into Table1(col1,col2)
  SELECT
   A.RT.value('Admin[1]','varchar(max)'),
   B.DT.value('@value','varchar(max)')
   FROM @MainXml.nodes('Parent/Root') as A(RT)

cross apply A.RT.nodes('Data/Type') as B(DT)

它将在上面的 xml 上正常工作。

如果部分被删除,它将无法工作。

为什么我的查询不适用于

Declare @MainXml XML =
'<Parent>
  <Root>
      <Admin>admin1</Admin>     
  </Root>
 <Root>
     <Admin>admin2</Admin>
 </Root>
</Parent>'

我的 XML 中的部分可能存在也可能不存在。那么如何处理这样的xml。

如果没有数据,想给它输入null。

请给我建议。

最佳答案

这应该有效:

编辑:哦,我刚刚意识到,类型节点不止一个。稍等一下...

好的,你做得很好,只需将 CROSS APPLY 更改为 OUTER APPLY...

HTH

关于mysql - 将 XML 读入 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31326808/

相关文章:

php - 如何通过 Laravel 统计独立访客并在图表中显示?

mysql - 如果我在 mysql (LINUX) 中删除 ibdata1 会怎样

sql-server - 我的查询中出现“将 int 转换为数据类型 numeric 时出现算术溢出错误”错误

c# - 按定义的顺序返回匹配的 SQL 结果?

sql - TSQL BINARY_CHECKSUM 作为默认值

mysql - (SQL Server) 在第一次出现 'character' 后返回子字符串值

android - 布局设计Android的麻烦

xml - 来自 node.js 的 XSD 验证功能?

java - 安卓。如何捕捉键盘隐藏的时刻?

php - 我的 PHP/SQL 查询有什么问题(不会从 SQL 读取)(登录系统)