提取XML数据并加载到数据库中(可能的方法)

时间:2016-06-14 03:03:25

标签: sql-server xml xpath ssis xquery

我的对手为我们提供了一个示例XML文件,我们正在进行概念验证是否可以将文件中的数据导入数据库。

XML文件如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<xmloutfile>
<header>
<TYPE>XLFT</TYPE>
<DN>C001</DN>
</header>
<table>
<row>
<column></column>
<column></column>
<column></column>
<column></column>
<column></column></row>
<row>
<column></column>
<column></column>
<column></column>
<column></column>
<column></column></row>
<row>
<column>ID</column>
<column>Title</column>
<column>Type</column>
<column>Country</column>
<column></column></row>
<row>
<column>12345</column>
<column>ABC</column>
<column>SN</column>
<column>Hong Kong</column>
<column></column></row>
<row>
<column>17777</column>
<column></column>
<column>MO</column>
<column>China</column>
<column></column></row>
<row>
<column></column>
<column></column>
<column></column>
<column></column>
<column></column></row></table></xmloutfile>

我们感兴趣的是 ID,标题,类型,国家(也许是评论)的值

<column>ID</column>
<column>Title</column>
<column>Type</column>
<column>Country</column>
<column></column></row>
<row>
<column>12345</column>
<column>ABC</column>
<column>SN</column>
<column>Hong Kong</column>
<column></column></row>

想象一下这是一个通用表,我怎么能相应地插入这些数据?

最终我想使用 SSIS 来做这件事,但此时此刻(如果我可以通过SSIS做到这一点会很好!),但只是想评估任何可行的方法。 Tks

1 个答案:

答案 0 :(得分:1)

的XQuery:

declare @x xml ='<xmloutfile>
  <header>
    <TYPE>XLFT</TYPE>
    <DN>C001</DN>
  </header>
  <table>
    <row>
      <column></column>
      <column></column>
      <column></column>
      <column></column>
      <column></column>
    </row>
    <row>
      <column></column>
      <column></column>
      <column></column>
      <column></column>
      <column></column>
    </row>
    <row>
      <column>ID</column>
      <column>Title</column>
      <column>Type</column>
      <column>Country</column>
      <column></column>
    </row>
    <row>
      <column>12345</column>
      <column>ABC</column>
      <column>SN</column>
      <column>Hong Kong</column>
      <column></column>
    </row>
    <row>
      <column>17777</column>
      <column></column>
      <column>MO</column>
      <column>China</column>
      <column></column>
    </row>
    <row>
      <column></column>
      <column></column>
      <column></column>
      <column></column>
      <column></column>
    </row>
  </table>
</xmloutfile>'


select t.c.value('column[1]', 'nvarchar(max)')
    , t.c.value('column[2]', 'nvarchar(max)')
    , t.c.value('column[3]', 'nvarchar(max)')
    , t.c.value('column[4]', 'nvarchar(max)')
    , t.c.value('column[5]', 'nvarchar(max)')
from @x.nodes('//row') t(c)