我们正在设计从 MAS200 等外部源将数据导入到我们的生产 SQL Server 2005/2008 数据库中。源将是一个事务性数据库并且是安全/隔离的。我们需要使我们的数据库与源保持同步,以便定期进行数据同步。
我们可以自由询问任何类型的源数据——比如 CSV、txt 文件的形式,或者甚至将源数据放在另一个具有类似结构的 SQL 数据库中。我们需要选择导入数据的最佳方式——它是周期性的,可以每小时或每天完成一次。
根据我的经验,我相信将源数据保存在 SQL 数据库中可能是最好的入门方式。这是迄今为止我们得出的粗略设计 -
- 定期源数据库将在外部填充(不是我们的部分)
- 预处理:抛光源表数据(即修剪、查找) - 通用数据格式化和转换
- Fetch:创建一个 CURSOR 来遍历记录。我们计划更新现有数据并插入新数据,因此我们将需要至少两个 CURSOR 循环一一进行。
- 填充:在 CURSOR 循环内记录将被更新/插入
- 后处理:再次进行一些最后的润色和查找映射(即用 id 替换代码)
- 检查:最后,对表进行一致性检查,以确保导入数据的完整性
总而言之,我们将打破存储过程中的步骤,然后创建一个 SQL 作业,将按照这些步骤一一进行。我知道有很多方法可以做到这一点,SSIS、数据导入向导等。但我们需要保持它非常简单、易于移植、更少依赖和灵活以应对未来的变化。
注意:数据将是巨大的 - 我们上次进行类似设置时需要几分钟(大约 20-25 分钟)才能完成整个数据导入过程,因此我们安排了每小时一次的数据导入。
谢谢你。
更新#1: 我知道使用 MERGE 命令似乎是最好的。但如果我必须为 SQL Server 2005 创建它?我相信它适用于 2008 年以后。我找到了一个链接-
http://sqlserver-tips.blogspot.com/2006/09/mimicking-merge-statement-in-sql.html
2005年还有什么想法吗?