将 XML 读入 SQL 表

Reading XML into SQL tables

我正在阅读 xml 并将其写入 sql tables

想在 xml 下方插入 table

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