2012-03-07 44 views
0

我需要将数据从一个MS SQL数据库移动到另一个MS SQL数据库。但是,该目标数据库有点不同。例如,一个表具有相同的行,但具有不同的数据类型等等。从我读到的内容来看,它看起来像是SSIS,但是,工具箱中的流程和组件如何用于上述示例?我担心的是我可能不得不为每个表创建一个数据流源或类似的东西。无论如何,更省时的选择是什么?移动数据库表,进行一些转换 - SSIS

谢谢!

+0

为什么要为每个表/对象创建数据流关注你? – billinkc 2012-03-07 16:20:17

+0

也许我把这个错误的方式......并不是它牵涉到我,但是如果我的大多数表格在源DB和目标DB上具有相同的定义,那么自动将这些映射为有点是很好的。我正在考虑在这里绘制50张表格,这是需要花费的时间。所以我试图在这里找到两件事:是否有一种简单的方法来映射这些相等的表,以及转换不相等的表的过程是什么。谢谢。 – 2012-03-07 16:26:38

+0

这样做更有意义。这是一次性过程还是需要多次运行?预期的数据量是多少? – billinkc 2012-03-07 16:47:24

回答

3

鉴于它是一次性任务并且数据量很低,我使用导入/导出向导来生成移动所有这些表的基础知识。您可以右键单击SSMS,任务,导出...中的数据库,或者直接从命令行/开始 - >运行DTSWizard.exe运行

无论哪种方式,您都会有一个向导来引导您的屏幕。他们大多是不言自明的,但从来没有阻止我评论。

前2个屏幕定义来源和目的地。 “SQL Server Native Client 10.0”的默认值都是正确的,只需定义源和目标服务器名称以及数据库/目录。

第3个屏幕接受来自一个或多个表或视图的默认Copoy数据。

第4个屏幕允许您选择源表并且目标的默认值将是相同的表和模式。如果任何表具有标识列,您需要单击“编辑映射...”按钮并选中“启用标识插入”选项。这需要按照表格完成。

第5屏很重要。由于您需要在数据进入目标表之前操作数据,请取消选中立即运行(除非您感到幸运)并选中Save SSIS Package。保存到文件系统,将软件包保护级别更改为“不保存敏感数据”

第6个屏幕询问软件包应保存在哪里以及应该调用什么。我将它命名为so_Araujo并将其保存到c:\ sandbox \ ssishackandslash \ ssishackandslash \ so_Araujo.dtsx您称之为何处并不重要,只需记下它在哪里。

单击完成并查看操作。如果有“错误插入只读列”类型的错误,请注意这些错误最有可能是遗漏了身份插入。

打开Visual Studio,创建一个SQL Server Integration Services类型的新项目(在商业智能部分下),然后右键单击该项目(我的名为SSISHackAndSlash)并选择Add,New Item ...选择包在第6个屏幕上创建并双击打开它。

导入/导出向导会将许多不相关的源目标放在一个数据流中。由于这是一次性的,所以我不会太在乎GUI的增加和所有表格的连接速度。

现在将数据类型强制转换为正确的类型以及您需要完成的任何其他功能。您将查看Derived Columns TransformationsData Conversion Transformations的组合,然后重新映射目标表中的列。如果你有特殊问题,请唱歌。我可能已经完成了一些SSIS;)

另一种解决方案是使用EzAPI编写大部分数据移动的脚本,然后手动编辑需要按摩的20%。

+0

非常奇妙,感谢您的详细解答! – 2012-03-07 17:59:42