SQL表内容从外部数据源更新

时间:2013-10-08 08:22:29

标签: sql sql-server automation data-migration

我不知道如何提出这个问题所以如果我没有使用适当的术语等,请指导我正确的方向,但我可以解释我目前在做什么。我想知道是否有一种更简单的方法来更新数据库中的内容,而不是我目前使用的方法。 (我正在使用SQL Server 2008 BTW。)

我有一堆CSV文件用于提供给我的客户端,作为更新导入数据库的内容的一种方法(因为内容很大)。导入通过运行我编写的python脚本来运行,该脚本使用Jinja2模板生成将CSV内容插入数据库所需的SQL文件(如果它是从头开始的场景)。这工作正常。 现在谈到数据迁移(我需要将数据库中存在的数据迁移到新版本)我有很多手工工作(我在模板中手工编写代码,没有SQL命令或自动生成我可以运行的代码为我做这件事。

因此,假设我在CSV文件中有一个医院列表,我已经在数据库中有一组医院(从以前版本的CSV文件导入)。我创建了Hospitals表的副本(没有数据)并称之为HospitalsTemp。新的CSV医院被插入到HospitalsTemp表中(至少该部分是通过模板生成的)。 现在,Hospitals表与其所有外键和约束分离。现在我通过医院周围的所有表格(再次手动!)并用新医院替换指向旧医院的医院ID(因为我可以根据医院代码从医院查找到HospitalsTemp,以确保保留参照完整性)。 然后我删除Hospitals表并将HospitalsTemp重命名为Hospitals并将外键和约束放回到新的Hospitals表中。

我希望我能够很好地解释它,让每个人都能理解。我真的希望有一种更简单的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

你怎么知道哪家医院成了哪家,名字是否保持不变?是否有一个ID保持不变?

您是否看过SSIS和Slowly Changing Dimension组件?您可以使用它来更新现有行并添加新行:http://blogs.msdn.com/b/karang/archive/2010/09/29/slowly-changing-dimension-using-ssis.aspx

SSIS也是导入的好工具,因为它可以很好地处理CSV文件。

您可以使用简单的SSIS包替换当前逻辑,该SSIS包只是一个平面文件数据源,而SCD向导的输出可以用它的声音替换吗?