将数据从Access迁移到SQL Server的最佳方法

时间:2014-08-05 07:45:46

标签: sql sql-server database ms-access-2007

问题

好的,对不起,我的问题有点抽象和主观,但会尽量使其尽可能具体。所以,我所处的情况很简单 - 我正在使用ASP.NET MVC在一个新网站上重建一个非常古老的MS Access应用程序。由于目前MVC站点正在使用SQL Server 2008(出于众所周知的原因),我需要找到一种迁移表和数据的方法,因为旧数据库中的信息将用于新的应用程序中。

好吧,到目前为止一直很好,但是有一些问题。旧的应用程序是用不同的语言编写的,这意味着我想将表名,字段名和所有其他名称翻译成英语。此外,我将对模型本身进行一些更改(更改某些字段的类型,向某些表添加其他字段,删除旧的不必要的字段等)。所以从技术上来说,我会“按照自己的方式”#39;一切。

研究解决方案

考虑到这些因素,我研究了将数据从Access数据库迁移到SQL Server的方法。当然,关于这个问题有很多信息,仅在Stack Overflow中就有不止一些问题和解决方案。那我为什么要努力找到答案呢?好吧,我发现了一些解决方案,这些解决方案在某种程度上已经足够(实际上肯定会解决我的问题),但我写的是要问一个有经验的人是否比我有更好的观点。好吧,解决方案以及为什么我仍然在寻找建议:/我将列出我发现的几个最常见和最受欢迎的,其他许多共享相同的功能和/或结果/

  1. Upsize Wizzard(Access) - 这是专为从Access迁移表和数据而设计的工具。这是我最喜欢的一个,因为我发现它很容易使用,它提供了良好的整体效果。我能够将表迁移到SQL Server(当然还有数据),这或多或少是我打算做的。它很快,似乎它允许您迁移索引,主键甚至我的知识外键(表关系)。然而,这个工具的缺点包括它忽略了你的查询(我并不真正需要它)并且它没有提供一种方法来改变表的属性的模型,名称或类型你迁移 - 这是我更喜欢的东西,因为我将不得不进行一些更改,添加,重命名,删除等等。然后继续开发过程(应用程序),这将导致一些额外的微小变化。最后,我需要在生产服务器上应用所有更改(迁移+所有更改),这总体上容易出错,因为我将手动执行(并且有多个表)。

  2. SQL Server迁移助手(SSMA) - 好吧,这是一个单独的工具(不包含在Access中),具有相同的想法 - 将数据从Access迁移到......可能无处不在,避风港 研究了那个。总的来说,它提供了更多功能和从Upsize向导定制,但当然它以更复杂的方式完成。我还没有花足够的精力用这个工具进行迁移,因为它涉及大量的安装和额外的工作,但根据我的研究,它提供了我所需要的几乎所有(如果不是全部)功能。然而,缺点是命名。正如我所提到的,它允许您对表,模式,字段,索引,键以及可能的所有内容应用更改,但文章建议我首先更改Access中的名称,因为它将更容易并且迁移过程将更顺利地运行。我不允许对原始的Access数据库进行更改,因为它将一直保持功能,直到发布更新的'项目,以及其中的数据正在被使用,所以文件的一个副本是我不是特别喜欢的解决方案,因为我可能会放弃新的记录。此外,我无法预测我在开发过程中想要做出的改变(正如我所说,我相信我希望/稍后当我在我的数据设计中找到“弱点”时需要进行一些额外的更改。开发过程)所以我觉得这是一个半生不熟的解决方案。

  3. 结论

    我看到的选项是两种:

    • 使用“升迁”向导迁移访问表,然后编写应用我想要进行的更改的脚本。然后在开发过程中添加对脚本的任何其他更改。准备好在生产服务器上发布时,使用向导重新应用迁移,运行更改脚本并祈祷一切正常。

    • 更多地参与SSMA工具,并尝试使用迁移过程生成表的更新版本。 (查看重命名的效率,并决定是否使用复制的文件重命名,然后找到一种方法只迁移新记录或在SSMA中完成所有操作)。然后再次为开发过程中发生的更改编写脚本,并在准备好后重新执行并将其全部应用到生产服务器上,然后祈祷一切正常。

    • 选项我还没有看到,应用它然后祈祷一切都很好。

    我已经研究了这个问题了几天,发现了一些我认为不太好的解决方案。但是,我有可能在地图上错过了大红色X'这是一个实用且简单的解决方案,看起来它是专门为我设计的(尽管我对此有点怀疑)。无论如何,减少我到目前为止所写的一些简单问题的疯狂情况如下:

    • 有人知道我的结论是否正确?我倾向于选择一,因为它更容易完成。

    • 有没有人经历过/找到了更好的方法,或者只是找到了一些逻辑跳跃式的'在我的着作中,因为我过度思考整个事情,可能会做一些明显的错误估计。

    非常抱歉提出一个微不足道的问题,其中包括可能涉及更深入了解我的项目和情况的决策,但我正在处理相当敏感的数据并希望得到反馈,即使只是为了提高我对所选择的信心做法。

1 个答案:

答案 0 :(得分:1)

您可能还需要考虑其他一种工具/方法,以满足您的特定需求。这将是使用sqlserver附带的数据导入/导出工具将所有数据的完整副本写入sql server中的临时位置,然后编写自定义查询以重新组织要进行的名称和其他更改。更多的工作,但您可以使用最终产品作为迁移的种子方法;)(如果您最初是在做代码)