我遇到了一个问题,我需要每天将一个巨大的 XML (> 1Gb) 导入到 SQL Server 2008 中。我现在拥有的是一个示例 XML 文件及其 XML 模式。 XML 模式非常复杂,其中包含许多自定义定义的简单类型和复杂类型的元素,例如:
<xs:element name="xxxx_url">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute ref="target" use="optional"/>
<xs:attribute ref="abc" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
导入后,将实现一个 WCF 服务来检索存储在 SQL Server 中的数据,如搜索、检索等(只读操作)。
我能想到的实现步骤是这样的:
- 根据提供的XSD(手动)定义对象模型,对象模型将用于WCF服务返回值。
- 根据提供的 XSD(手动)定义数据库模式,该模式估计有大约 20 - 30 个表。
- 创建一个 SSIS 包,每天将 XML 加载到数据库中。
- 创建一个 WCF 服务,该服务从数据库中读取数据,将数据填充到第 1 步中定义的对象模型中,并将该对象返回给服务客户端。
问题在于这些步骤涉及大量手动工作。我必须逐行研究 XSD,并手动将其转换为对象模型和数据库模式。
我做了一些研究,发现有一些自动化工具可以将 XSD 转换为类,也可以将 XSD 转换为数据库架构。但是用工具从XSD转换出来的类很乱,而且因为不符合MS数据集格式,转换成schema也失败了。
请问有没有什么好的解决办法,省去很多手工工作?
感谢任何建议!
最佳答案
在某些时候,您必须进行转换。无论您这样做是将 XML 读入对象还是读入表中的数据。这项工作应该完成一次,然后您只需要运行生成的过程。我看到的问题是:
XML 非常大。
您还没有 XSD 到所需架构的映射。
映射是您必须要做的工作。我认为,如果您可以将 XSD 导入到表中,然后从这些临时表导入到您希望使用的模式,那么性能会最好。使用 XML 文件会因其大小而给您带来问题。
所以我的建议是强制/混淆将 XML 导入到任何表结构中。然后编写一个存储过程以将这些表中的数据“导入”到您的“真实”模式中。
帕特奥
关于c# - 每天将大量 XML 数据(> 1Gb)导入 SQL Server 2008,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1772372/