我正在寻找一些可能的选择,以便从xml文件有效地填充关系SQL Server数据库。所以基本上我想象一个完成它的三步过程;
我不确定是否可以轻松地将xml直接映射到目标数据库,即。跳过第2步,但我的倾向是它会使这个过程有点复杂。
来自公共网址的xml阅读部分类似于www.abc.com/xmlfeed.xml,这需要每晚例程才能使此文件可供处理。有点像windows任务计划......或者更好的方法吗?
我只有两天的时间来完成这项工作,所以我更喜欢任何能够以较少的编码工作快速实施的东西。但是我确实需要这种方法在将来可维护,因为我每天都会使用相同的旧模式接收新的xml数据。如果模式稍微改变,我希望调整例程的过程无忧无虑。
我认为由于这种要求的频率,遗留数据到SQL Server的迁移将是几分钟的任务,但令我惊讶的是,对于不同的xml迁移技术,在互联网上几乎没有讨论/比较。我真的困惑决定我应该采取的路线,像SSIS这样的纯SQL Server解决方案或类似xml解析器的东西。
答案 0 :(得分:1)
当我阅读你的帖子时,我的第一个想法是SSIS,最后你自己写了。特别是如果你熟悉它,我推荐它。您可以在两天内实施此类解决方案。
实施ETL过程后,您可以创建一个SQL Server代理作业,该作业将安排您的SSIS包在您希望它运行时运行。它支持从SQL Server或文件系统运行包。
根据你的例子。在SSIS中实现这样的解决方案是完全可能的。我给出了一些处理XML结构的示例项目的截图。
第一张图片显示SSIS包由3个控制流程步骤组成。它们中的每一个都是数据流任务。首先它处理制造商然后处理模型然后汽车。
我只实施了制造商部分。这在图像#2和#3中示出。 (它们重叠一点。)在#2中,我读取了XML内容(XML Source任务),由制造商聚合它(聚合任务)。然后我也按制造商名称(排序任务)对它们进行排序。另一方面,我读了SQL数据库中存在的制造商(通过OLE DB Source任务),然后这也将被排序。
之后,通过连接操作(类似于SQL)合并这两个源(合并连接任务)。在这种情况下,这是一个FULL OUTER JOIN,因此您可以确定哪个制造商是新的,哪个应该删除。我根据前两个条件(新的,删除的)将记录分成两部分。
最后,我通过OLE DB目标任务添加新的制造商,并借助OLE DB命令任务删除缺少的制造商。在后一种情况下,我假设SQL中存在一个存储过程(称为DeleteManufacturer(@ManufacturerName)),它将删除制造商和所有附加的模型和汽车。 (级联删除)
其他两个数据流任务应该以相同的方式实现。如果您应该匹配匹配的记录,则条件性拆分任务必须具有三个条件,并且新的树束附加到此第三个条件。这里新的OLE DB命令可以与UPDATE语句一起使用。
如前所述,如果您已准备好使用该软件包,则应创建一个SQL Server代理作业,该作业将在晚上(或您希望的时间)运行您的软件包。