我有一个非常大的XML文件(带有xsd文件),它有许多不同的对象需要导入到SQL Server表中。当我指对象时,我的意思是最高级别的XML包装标记,例如产品,订单,地点等
我目前使用SSIS的方法是:
我必须为XML文件中的所有对象重复步骤3-5,这些对象可能会遇到数百个。我无法手动执行此操作。
有没有让SSIS只为SQL服务器中的所有不同对象创建新表并将数据导入到那些?因此它会自动创建dbo.Products,dbo.Locations,dbo.Customers并将正确的XML数据放入这些表中。
我看不到任何其他可行的方法。
答案 0 :(得分:1)
无论如何都要让SSIS为所有人创建新表 SQL Server中的不同对象并将数据导入到那些?
否:(
这里真的有两个问题。你没有得到第二个,但是,ssis可能会扼杀一个非常大的xml文件。 XML源组件在读取时将整个文件加载到内存中。
我可以想到几种选择: - 使用XSLT转换 - 滚动自己的sax解析器并使用脚本组件源
对于XSLT方法,您可以将每个对象转换为平面文件,即将您的客户数据解析为csv格式,然后添加数据流以在每个平面文件中读取。缺点是ssis使用早期版本的XSLT,它也将整个文件加载到内存中,而不是流式传输。但是,我已经看到这个在0.5 GB大小的文件上表现非常好。此外,如果您还不熟悉XLST,那么学习它可能很有挑战性,但它在将数据转换为关系形式方面非常强大。
sax解析器方法允许您流式传输文件并将所需的部分拉出为关系形式。在脚本组件中,您可以将不同的对象指向不同的输出。