我正在编写代码以将数据从我们的实时Access数据库迁移到新的Sql Server数据库,该数据库具有与重组结构不同的模式。此Sql Server数据库将与我们正在开发的应用程序的新版本一起使用。
我一直在用C#编写迁移代码,调用Sql Server和Access并根据需要转换数据。我第一次迁移了一个表,其中包含与我最近没有更新的另一个表的新条目相关的条目,并且由于无法找到SQL Server中相应表中的记录而导致错误
因此,我的SqlServer产品表只有1/14/09的数据,我将继续从Access迁移更多的表。所以我想编写一个更新方法,可以弄清楚Access中的新内容在Sql Server中没有反映出来。
我目前的想法是在SQL端编写一个查询SELECT Max(RunDate)FROM ProductionRuns,以便在表格中给出该字段中的最新日期。在Access方面,我会写一个SELECT * FROM ProductionRuns WHERE RunDate>的查询。 ?,其中参数是在SQL Server中找到的最大日期,并在代码中执行我的转换步骤,然后在Sql Server中插入新数据。
我想知道的是,我是否有正确的语法来获取该Sql Server表中的最新日期?有没有更好的方法来实现这种实时数据库的迁移?
编辑:我所做的是制作当前实时数据库的副本。然后我可以迁移而不用担心更改,然后在开发期间使用它进行测试,然后我可以在新数据库和应用程序上线时迁移最新数据。
答案 0 :(得分:4)
我个人会将这个过程分为两个步骤。
通过这种方式,您可以编写一组SQL代码来完成第二步任务
或者使用SSIS
答案 1 :(得分:2)
通常,当您将数据转换为新数据库并将其置于产品中时,您会在一段时间内关闭数据库的所有用户,运行迁移并打开新数据库。这可确保在进行转换时不会对数据进行任何更改。当然我也不会用c#做到这一点。数据迁移是一项数据库任务,应该在SSIS(或DTS,如果您有旧版本的SQL Server)中完成。
如果您要转换的数据库正在开发中,我将创建Access数据库的备份并从那里加载数据以测试数据加载过程并获取数据,以便您可以进行应用程序开发。然后,当需要进行实际加载时,您只需关闭真实数据库给用户并使用它来加载。如果你想要保持两者同步,那么我就不会这样做,但是如果你必须这样做,那就做一个夜间备份文件,并在早上使用你的过程加载。
答案 2 :(得分:1)
您可能希望投资使用像SQL Data Compare这样的工具。
我相信它也支持访问数据库,您可以下载试用版。
答案 3 :(得分:1)
我很高兴你使用C#代码,但由于您暂时可以disable them and then enable after you copy the whole lot暂时限制目标数据库中的限制而失败。
我假设您的目标数据库是没有数据的全新数据库,并且在传输发生时没有被任何人使用
答案 4 :(得分:0)
听起来你有两个问题:
如果您在人们使用数据时尝试迁移数据,那么执行上述任一操作都会非常棘手。
最简单的方法是根据数据的静态副本迁移数据,并从捕获静态副本的那一刻开始对该数据进行更新。我不知道这在Access中是多么容易,但在SQLServer或Oracle中,您可以使用重做日志或使用触发器的手动解决方案。穷人这样做的方法是为记录已更改记录的主键的所有相关表创建触发器。然后在关闭旧数据库之后,您可以迭代这些键并从旧数据库中获取这些记录并将它们放入新数据库中。只需复制整个记录;如果删除了记录,则将其从新数据库中删除。
您的问题因为您不能简单地复制数据而变得更加复杂,您必须对其进行转换。这意味着您可能必须关闭两个数据库并根据更改列表重新迁移记录。需要进行大量的计划才能确保您正确行事,我建议您编写一个测试脚本,以验证生成的数据是否正确。
另外,如果可能的话,我会确保迁移代码在其中一个数据库中运行。否则,您将复制数据两次,这将严重损害性能。