2013-01-09 71 views
2

我正在处理旧的C++ MFC项目(> 10年)。数据库应用程序适用于从MS Access(2007)迁移到MS SQL Server(2008 R2),我面临着一些障碍。为了导出数据,我使用了MS SQL Management Studio(菜单中的“导入”选项) 众所周知,Access和MS SQL之间的数据类型存在一些差异。这变成了一些麻烦。将MS Access中的数据导出到MS SQL,并更改架构和表格

  1. 列 “ID” 从Access(自动编号,不为空,主键)成为在SQL Server(INT,不为空,没有任何自动递增),只是平常列。所以在向表格中插入新行时出现了很多错误。

  2. 是/否键入Access(-1/0; NULL是不允许的)变成位(1/0/NULL),工作逻辑不应该被破坏,因为在大多数地方是成为对比不等于0:

    query.Select() .Buff( “ID”,&代码) .FromS( “%TABLE_NAME%”,NULL) 。凡()STR(” Aktiv <> 0“) .Execute();

寻找解决方案我看到了Access的advice to use SSMA(SQL Server迁移助理)。由于它重新创建了主键/外键,创建了CHECK的索引,它更好,更智能。但不幸的是,很多外键的行动更新/删除操作变得不是级联,但没有行动。模式导入后的警告消息:

MS Access table%Table1%上的FOREIGN KEY约束“Reference77”可能导致循环或多个级联路径。表%Table2%到表%表1%中的级联选项在SQL Server中设置为No选项。

这并不是一个惊喜的应用程序在删除对象时会出现一些错误,尽管它在Access中都是正常的。为了测试,我选择了一个删除操作(在应用程序中)出现错误。我观看了错误消息并更改了无动作 - >级联通过SSMS(SQL Server Management Studio)参与FOREIGN KEYS。之后,应用程序中的删除操作成功。

我的问题是:

  1. 我说得对不对,我只需要改变无动作 - >级联为外键来获取数据库应用程序可以工作完全正确的?或者可能会出现另一个我不知道的问题?
  2. 如何实现?我希望它是将它应用到客户端的SQL Server上的一个很好的解决方案。

感谢您的帮助,我真的很感激它!

回答

4

感谢您的回答。我的问题的解决方案是...直接从Access(2010)导出数据到SQL Server。 我想:

  1. “SQL Server导入和导出数据”,结果 - 从Access数据库,没有任何主oк外键,没有转型自动编号的与身份和自动增量列只有数据的复制。

  2. 访问的SQL Server迁移助手,结果 - 许多外键丢失CASCADE属性以进行更新/删除操作。但所有其他事情都可以。

  3. Access 2010!数据库工具 - > SQL Server - > ...使用向导 - >模式和数据都一切正常。应用程序适用于从Access导入的SQL Server数据库。

所以从访问SQL Server直接出口给所需的结果。

+2

未来读者注意事项:在Access 2013中删除了SQL Server升迁向导(推荐选项#3),因此[SQL Server迁移助理(AccessToSQL)](http://msdn.microsoft.com/ en-us/library/hh313039%28v = sql.110%29.aspx)(选项#2)可能是Access 2013及更高版本的最佳可用选项。 –

2
  1. 也许,但你仍然需要测试。

  2. 对于可重复使用的解决方案,我将编写SSMA创建的数据库(检查所有类型和外键是否正确)。有了这个脚本,您可以在任意数量的服务器上创建一个空的SQL Server数据库。 要填充这些数据库,我会使用Integration Services包。使用导入向导很容易创建:通过所有步骤,但保存包而不是立即运行。然后你可以打开这个包并编辑它(添加数据转换或任何其他必要的逻辑)。

相关问题