代码之家  ›  专栏  ›  技术社区  ›  andrewWinn

MySQL到SQL Server传输数据

  •  4
  • andrewWinn  · 技术社区  · 15 年前

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

    这里要注意的是,旧的数据库设计得不好,但新的数据库采用了适当的3N格式。有人对如何做这件事有什么建议吗?我有2005年的SSMS。

    1. 我可以用它连接到mysql数据库并创建一个dts吗?还是需要使用ssis?
    2. 我是否需要编写mysql db脚本并将每个语句更改为“insert”到SQL Server db?

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

    6 回复  |  直到 15 年前
        1
  •  10
  •   3Dave    15 年前

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

    恭喜你在RDBMS世界里进步!

        2
  •  5
  •   HLGEM    15 年前

    SSIS设计用于执行此类操作。第一步是手动绘制出新结构中每个数据块的位置。因此,旧表有四个字段,在新的结构文件ds1和2中,转到表A,字段3和4转到表B,但您还需要从表A中自动生成ID。请记下数据类型更改的位置,您可能需要进行调整,或者在以前不需要数据的情况下需要文件。

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

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

    这不是一个简单的任务,但如果你花时间,有条理地工作,它是可行的。现在不是尝试捷径的时候。

        3
  •  0
  •   Kenneth Cochran    15 年前

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

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

        4
  •  0
  •   Cyril Gupta    15 年前

    我真的不知道一个“ETL”工具能给你带来多大的帮助,这取决于原始和新的数据库设计。在我的职业生涯中,我需要做的不仅仅是一些数据迁移,我们通常需要设计一个特殊的实用程序,用旧数据库中的记录更新一个新的数据库,是的,我们用所有的更新/插入语句对其进行编码,以转换数据。

    我不知道您的数据库有多少个表,但是如果它们不太多,那么您可以考虑使用Grunt根目录。这是一种技术,它终究会起作用。

        5
  •  0
  •   Tom H    15 年前

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

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

    我确信ssis可以处理您需要做的任何转换,以将其从旧格式更改为新格式。另一种选择是将表导入到MS SQL,就像导入临时表一样,然后使用SQL代码将数据转换为3NF表。这完全取决于你对什么最满意。如果您选择第二条路径,那么可以使用我在SSMS中提到的导入过程。它甚至可以为您创建目标表。只要确定你给他们起了独特的名字,也许在他们前面加上“stg_uuu”之类的词。

    Davud提到了链接服务器。这绝对是你可以走的另一条路(而且得到了我的赞成票)。就个人而言,我更喜欢先将表复制到MS SQL中,因为链接服务器有时会有一些奇怪之处,尤其是在数据类型不在不同提供程序之间映射时。如果必须重新运行或更正部分数据,那么将所有表都保存在MS SQL中可能会更快一些,并节省时间。不过,正如我所说,链接服务器方法可能也会很好。

        6
  •  0
  •   Andy West    15 年前

    我已经朝另一个方向做了这件事,而且SSIS工作得很好,尽管我可能需要使用脚本任务来处理轻微的数据类型异常。 SSIS does ETL .