SSIS如何将xml元素导入表中

时间:2014-09-17 06:40:24

标签: sql-server ssis sql-server-2012

我在SSIS中使用XML源将XML文件导入SQL Server数据库。

我没有使用XML文件中的所有细节元素。但是我希望保存原始元素以及所有细节以防将来需要它们。

让我们说xml:

<root>
  <row>
    <desc>Some row</desc>
    <child>
      <hi>hi</hi>
      <ho>ho</ho>
    </child>
  </row>
  <row>
    <desc>Some row2</desc>
    <child>
      <hi>hi2</hi>
      <ho>ho2</ho>
    </child>
  </row>
</root>

结构中的预期结果:

Create Table ParentTable
(
    Id int primary key identity,
    [desc] nvarchar(50),
    xmlElement xml
)

如何使用SSIS将原始XML元素(在本例中为元素“row”)加载到数据库中?

1 个答案:

答案 0 :(得分:1)

我是SSIS的新手,但在互联网上找到了解决方案(可能不是最好的但是有效)。

所以来了。

  1. 首先我创建与您提供的 ParentTable 相同的表,只需将 desc 更改为255.还将Connection Manager添加到包中。
  2. 创建了两个新变量User::FileName = "some.xml"User::SourceCatalog = "C:\xmlCatalog\"
  3. 然后添加了数据流任务,其中添加了脚本组件(选定的源类型)。
  4. 脚本标签中打开脚本转换编辑器,将 ReadOnlyVariables 属性添加到新创建的变量User::FileName,User::SourceCatalog
  5. 输入和输出标签中将输出0 重命名为 XMLResultOutput ,并在输出列下创建了两个新列 xmlDesc (数据类型= Unicode字符串[DT_WSTR] 255)和 xmlData (数据类型= Unicode字符串[DT_WSTR] 3000)。此变量稍后将在C#脚本中使用。
  6. inputs and outputs

    1. 脚本标签中按编辑脚本... 。在CreateNewOutputRows方法的打开窗口中粘贴此代码:

      XmlDocument xDoc = new XmlDocument();
      
      string xml_filepath = Variables.SourceCatalog + Variables.FileName;
      xDoc.Load(xml_filepath);
      
      foreach (XmlNode xNode in xDoc.SelectNodes("//row"))
      {
      
          this.XMLResultOutputBuffer.AddRow();
      
          this.XMLResultOutputBuffer.xmlData = xNode.OuterXml.ToString();
      
          this.XMLResultOutputBuffer.xmlDesc = xNode.SelectSingleNode("./desc").InnerText;//xNode.ChildNodes[0].InnerText;
      
      } 
      

      不要忘记添加using System.Xml;

    2. 添加了 OLE DB目标组件,将脚本组件链接到该组件,选定的表格,映射列和THATS IT。