Sql server 使用架构和表更改将数据从MS Access导出到MS SQL 我正在研究旧的C++ MFC项目(10岁)。数据库应用程序正在从MS Access(2007)迁移到MS SQL Server(2008 R2),我在迁移过程中遇到了一些障碍。对于导出数据,我使用了MS SQL Management Studio(“菜单中的导入”选项) 众所周知,Access和MS SQL在数据类型上存在一些差异。这变成了一些麻烦

Sql server 使用架构和表更改将数据从MS Access导出到MS SQL 我正在研究旧的C++ MFC项目(10岁)。数据库应用程序正在从MS Access(2007)迁移到MS SQL Server(2008 R2),我在迁移过程中遇到了一些障碍。对于导出数据,我使用了MS SQL Management Studio(“菜单中的导入”选项) 众所周知,Access和MS SQL在数据类型上存在一些差异。这变成了一些麻烦,sql-server,tsql,ms-access,foreign-keys,Sql Server,Tsql,Ms Access,Foreign Keys,Access中的列“ID”(自动编号,不为NULL,主键)成为SQL Server中常见的列(int,不为NULL,并且没有任何自动增量)。所以我在表中插入新行时犯了很多错误 是/否在访问中键入(-1/0;不允许为NULL)变为位(1/0/NULL),工作逻辑不应中断,因为在大多数情况下,工作逻辑不等于0: query.Select() .Buff(“ID”和代码) .FromS(“%Table_Name%”,NULL) .Where().Str(“Aktiv 0”) .Execute()

Access中的列“ID”(自动编号,不为NULL,主键)成为SQL Server中常见的列(int,不为NULL,并且没有任何自动增量)。所以我在表中插入新行时犯了很多错误

  • 是/否在访问中键入(-1/0;不允许为NULL)变为位(1/0/NULL),工作逻辑不应中断,因为在大多数情况下,工作逻辑不等于0:

    query.Select() .Buff(“ID”和代码) .FromS(“%Table_Name%”,NULL) .Where().Str(“Aktiv 0”) .Execute()

  • 在寻找解决方案时,我看到了用于Access的(SQL Server迁移助手)。当它重新创建主键/外键、创建检查、索引时,它会更好、更智能。但不幸的是,很多外键的动作更新/删除操作并没有变成级联操作,而是无动作操作。架构导入后的警告消息:

    MS Access表%Table1%上的外键约束“Reference77”可能导致循环或多个级联路径。SQL Server中将表%Table2%到表%Table1%的级联选项设置为无选项

    这并不奇怪,应用程序在删除对象时会出现一些错误,尽管在Access中一切正常。为了进行测试,我选择了一个删除操作(在应用程序中),该操作出错。我查看了错误消息,并通过SSMS(SQL Server Management Studio)更改了相关外键的无操作->级联。之后,应用程序中的删除操作成功

    我的问题是:

  • 我说的对吗?我只需更改无操作->级联,外键就可以使数据库应用程序完全正常工作?或者会出现另一个我不知道的问题
  • 如何实现?我希望它是一个很好的解决方案,可以应用到客户端的SQL服务器上
  • 谢谢你的帮助,我真的很感激

  • 可能吧,但您仍然需要测试

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


  • 谢谢你的回答。解决我问题的办法是。。。将数据直接从Access(2010)导出到SQL Server。 我试过:

  • “SQL Server导入和导出数据”,结果-仅复制Access数据库中的数据,没有任何主oκ外键,没有将自动编号转换为具有标识和自动增量的列

  • SQL Server迁移助手用于访问,结果-许多外键丢失了更新/删除操作的级联属性。但其他一切都没问题

  • 访问2010!数据库工具->SQL Server->。。。使用向导->所有模式和数据都可以。应用程序可以很好地使用从Access导入的SQL Server数据库


  • 因此,直接从Access导出到SQL Server提供了所需的结果。

    未来读者注意:SQL Server升迁向导(推荐选项#3)已在Access 2013中删除,因此(选项#2)可能是Access 2013及更高版本的最佳可用选项。