如何使用SSIS自动将XML文件导入各种新表

时间:2014-12-03 14:14:53

标签: sql-server xml ssis

我有一个非常大的XML文件(带有xsd文件),它有许多不同的对象需要导入到SQL Server表中。当我指对象时,我的意思是最高级别的XML包装标记,例如产品,订单,地点等

我目前使用SSIS的方法是:

  1. 创建数据流任务
  2. 在数据流任务中设置新的XML源
  3. 将新的OLE DB目标拖到任务中
  4. 将XML输出链接到OLE DB目标的输入
  5. 打开OLE DB Destination任务,并要求它为数据创建一个新表
  6. 我必须为XML文件中的所有对象重复步骤3-5,这些对象可能会遇到数百个。我无法手动执行此操作。

    有没有让SSIS只为SQL服务器中的所有不同对象创建新表并将数据导入到那些?因此它会自动创建dbo.Products,dbo.Locations,dbo.Customers并将正确的XML数据放入这些表中。

    我看不到任何其他可行的方法。

1 个答案:

答案 0 :(得分:1)

  

无论如何都要让SSIS为所有人创建新表   SQL Server中的不同对象并将数据导入到那些?

否:(

这里真的有两个问题。你没有得到第二个,但是,ssis可能会扼杀一个非常大的xml文件。 XML源组件在读取时将整个文件加载到内存中。

我可以想到几种选择:   - 使用XSLT转换   - 滚动自己的sax解析器并使用脚本组件源

对于XSLT方法,您可以将每个对象转换为平面文件,即将您的客户数据解析为csv格式,然后添加数据流以在每个平面文件中读取。缺点是ssis使用早期版本的XSLT,它也将整个文件加载到内存中,而不是流式传输。但是,我已经看到这个在0.5 GB大小的文件上表现非常好。此外,如果您还不熟悉XLST,那么学习它可能很有挑战性,但它在将数据转换为关系形式方面非常强大。

sax解析器方法允许您流式传输文件并将所需的部分拉出为关系形式。在脚本组件中,您可以将不同的对象指向不同的输出。