【问题标题】:MySQL to SQL Server transferring dataMySQL 到 SQL Server 传输数据
【发布时间】:2010-12-22 13:39:37
【问题描述】:

我需要将 MySQL 数据库中已经存在的数据转换为 SQL Server 数据库。

这里需要注意的是,旧数据库设计不佳,但新数据库采用了适当的 3N 形式。有没有人对如何进行此操作有任何提示?我有 SSMS 2005。

  1. 我可以使用它连接到 MySQL DB 并创建 DTS 吗?还是我需要使用 SSIS?
  2. 是否需要编写 MySQL DB 脚本并更改每个语句以“插入”到 SQL Server DB 中?

以前有人经历过吗?请帮忙!!!

【问题讨论】:

    标签: mysql sql-server ssis dts


    【解决方案1】:

    您需要的是一个 ETL(提取、转换、加载)工具。

    http://en.wikipedia.org/wiki/Extract,_transform,_load#Tools

    【讨论】:

      【解决方案2】:

      我真的不知道“ETL”工具能带给您多远,具体取决于原始数据库设计和新数据库设计。在我的职业生涯中,我不得不进行多次数据迁移,我们通常必须设计一个特殊的实用程序,它可以使用旧数据库中的记录更新新数据库,是的,我们用所有更新/插入完成了编码将转换数据的语句。

      我不知道您的数据库有多少表,但如果它们不是太多,那么您可以考虑使用 grunt root。毕竟这是一种保证有效的技术。

      【讨论】:

        【解决方案3】:

        this link。这个想法是通过 MySQL ODBC 驱动程序将您的 MySQL 数据库添加为 SQL Server 中的链接服务器。然后,您可以通过 SSMS 对 MySQL 数据库执行任何您喜欢的操作,包括将数据复制到 SQL Server。

        恭喜您在 RDBMS 世界中进步!

        【讨论】:

        • 有些人不同意 MSSQL 是 MySQL 的升级版。 :D
        • 绝对是最简单的方法。也适用于将数据导入 Access(假设任何人都想这样做)。
        • @Kenneth:一开始我也是这么想的,但我认为他的意思是从糟糕的设计转向规范化。
        • 我知道,但我无法抗拒。
        • 这个答案中分享的链接真的很有帮助。 @大卫活泼
        【解决方案4】:

        我已经从另一个方向完成了这项工作,并且 SSIS 工作正常,尽管我可能需要使用脚本任务来处理轻微的数据类型异常。 SSIS does ETL.

        【讨论】:

          【解决方案5】:

          如果您在 SSMS 中转到您的数据库并右键单击,则在任务下应该有一个“导入数据”选项。你可以尝试使用它。它基本上只是一个为您创建 SSIS 包的向导,然后它可以自动为您运行,也可以保存并根据需要进行更改。

          最大的问题是您需要如何转换数据。这涉及到很多你没有包括在内的细节(而且这些细节可能太多了,你无论如何都不能在这里包括在内)。

          我确信 SSIS 可以处理您需要执行的任何转换,以将其从旧格式更改为新格式。一种替代方法是将表按原样导入到 MS SQL 中,然后使用 SQL 代码将数据转换为 3NF 表。这完全取决于您最喜欢什么。如果您走第二条路线,则可以使用我上面在 SSMS 中提到的导入过程。它甚至会为您创建目标表。只要确保你给它们起唯一的名字,也许在它们前面加上“STG_”之类的东西。

          Davud 提到了链接服务器。这绝对是您可以采用的另一种方式(并得到我的支持)。就个人而言,我更喜欢先将表复制到 MS SQL 中,因为链接服务器有时会出现奇怪的情况,尤其是当涉及到不同提供者之间没有映射的数据类型时。如果您必须重新运行或更正部分数据,则将表全部放在 MS SQL 中也可能会更快一些并且可以节省时间。正如我所说,链接服务器方法可能也可以。

          【讨论】:

            【解决方案6】:

            SSIS 就是为做这种事情而设计的。第一步是手动绘制每条数据在新结构中的位置。所以你的旧表有四个字段,在你的新结构中,fileds1 和 2 转到表 a,字段 3 和 4 转到表 b,但你还需要从表 a 中自动生成 id。记下哪些数据类型发生了变化,您可能需要进行调整,或者您在哪些地方需要提交以前不需要的数据等。

            我通常做的是创建临时表。将非规范化形式的数据放在一个临时表中,然后移动到规范化临时表并在那里进行清理,并在将新 ID 添加到临时表后立即添加它们。如果要从非规范化数据库迁移到规范化数据库,您需要做的一件事是,在将父表插入实际生产表之前,您需要消除父表中的重复项。您可能还需要进行数据清理,因为新结构中可能存在旧结构中不需要的文件,或者由于迁移到更好的数据类型而导致的数据转换问题(例如,如果您将日期存储在旧数据库中的 varchar 字段中,但正确移动到新数据库中的日期时间,您可能有一些没有有效日期的记录。

            您需要考虑的另一个问题是如何将旧记录 ID 转换为新记录 ID。

            这不是一件容易的事,但如果你花时间有条不紊地工作,它是可行的。现在不是尝试捷径的时候。

            【讨论】:

            • "SSIS 就是为做这种事情而设计的。" - 确切地。 :)
            猜你喜欢
            • 1970-01-01
            • 2010-10-29
            • 1970-01-01
            • 2016-01-13
            • 1970-01-01
            • 2016-03-17
            • 1970-01-01
            • 2012-09-29
            • 1970-01-01
            相关资源
            最近更新 更多