首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server数据导入

Server数据导入
EN

Stack Overflow用户
提问于 2011-11-16 13:37:37
回答 3查看 932关注 0票数 0

我们正在设计从MAS200这样的外部源导入到生产Server 2005/2008数据库中的数据。源将是一个事务性数据库,并且是安全/隔离的。我们需要使数据库与源保持同步,以便定期进行数据同步。

我们可以自由地请求任何类型的源数据,比如CSV、txt文件,甚至可以在另一个具有类似结构的SQL数据库中获得源数据。我们需要选择导入数据的最佳方式--它将是周期性的,可能是每小时或每天进行的。

根据我的经验,我认为在SQL数据库中拥有源数据可能是最好的入门方式。这是我们迄今为止得出的一个粗略的设计-

  1. 定期将源db填充到外部(而不是我们的部分)
  2. Preprocessing:修饰源表数据(即trim、查找)-一般数据格式和转换
  3. Fetch:创建一个游标来循环记录。我们计划更新现有的数据并插入新的,因此我们至少需要一个接一个地循环两个游标。
  4. 填充:在游标循环中将更新/插入记录
  5. 再次Postprocessing:一些最后的操作&查找映射(即用id替换代码)
  6. check :最后,对表运行一致性检查以确保导入的数据的完整性

总之,我们将打破存储过程中的步骤,然后创建一个SQL作业,它将一个接一个地遵循这些步骤。我知道有很多方法可以做到这一点,SSIS,数据导入向导等等。但我们需要保持它相当简单,易于移植,不那么依赖和灵活的未来变化。

注意:数据将是巨大的-上一次我们有一个类似的设置,它花了几分钟,像几乎20-25分钟来完成整个数据导入过程,所以我们安排了一个小时的数据导入。

谢谢。

更新#1:我理解使用合并命令似乎是最好的。但是如果我必须为Server 2005创建它呢?我相信它在2008年以后会起作用。我找到了一个链接-

http://sqlserver-tips.blogspot.com/2006/09/mimicking-merge-statement-in-sql.html

2005年还有其他想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-16 13:49:28

对于第3项和第4项,如果使用Server 2008,请考虑使用MERGE命令,而不是使用游标和循环

如果可能,保留源db的未触及副本,如果数据处理中有任何问题,您可以更容易地跟踪原因。

票数 2
EN

Stack Overflow用户

发布于 2011-11-16 14:09:17

你考虑过使用Server集成服务吗?听起来你的项目非常适合它。

我最近参与了一个项目,该项目从各种数据源(数据库和文件)中提取数据,对其进行聚合和清理,然后将其推入关系型Server 2008数据库。在SSIS里这一切都很直接。

票数 0
EN

Stack Overflow用户

发布于 2011-11-16 14:22:59

正如其他人所说,在这个过程中没有必要使用游标;我也同意SSIS可能比您想象的更适合这种情况(因为它是可移植的和可配置的)。但是,如果要在that中执行此操作,则建议您将获取步骤替换为如下所示:

  1. 从您的暂存表中提取用于润色数据的数据。
  2. 如果不能在SQL 2008中使用MERGE命令,则可以使用联接来模拟相同的内容: -要更新的行在staging.ID = destination.ID上从暂存连接目的地开始选择* --在staging.ID = destination.ID上要插入的行SELECT * FROM将连接目的地挂起,其中destination.ID为NULL

很简单,没有游标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8152542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档