使用架构和表更改将数据从MS Access导出到MS SQL

时间:2013-01-09 10:50:21

标签: sql-server tsql ms-access foreign-keys

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

  1. 来自Access的列“ID”(自动编号,而不是NULL,主键)成为SQL Server中常用的列( int ,不是NULL,没有任何自动递增)。因此,在向表中插入新行时,我遇到了很多错误。

  2. 是/否在Access中键入(-1/0;不允许NULL)变为位(1/0 / NULL),工作逻辑不应该像在大多数地方比较不等于0:

    query.Select() .Buff(“ID”,&代码) .FromS(“%Table_Name%”,NULL) .Where()。Str(“Aktiv<> 0”) .Execute();

  3. 寻找解决方案我看到了advice to use SSMA(SQL Server迁移助手)的Access。它更好,更智能,因为它重新创建了主键/外键,创建了CHECK的索引。但遗憾的是,很多FOREIGN KEY的动作更新/删除操作都不是 Cascade ,而是 No Action 。架构导入后的警告消息:

      

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

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

    我的问题是:

    1. 我是对的,我只需更改无操作 - >用于获取数据库应用程序的FOREIGN KEY的 Cascade 可以完全正常工作吗?或者可能会出现另一个我不知道的问题?
    2. 如何实现?我希望它是在客户端的SQL Server上应用它的一个很好的解决方案。
    3. 感谢您的帮助,我真的很感激!

2 个答案:

答案 0 :(得分:4)

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

  1. “SQL Server导入和导出数据”,结果 - 只复制Access数据库中的数据,没有任何主要外键,没有将自动编号转换为具有IDENTITY和自动增量的列。

  2. SQL Server Migration Assistant for Access,结果 - 许多外键丢失了CASCADE属性以进行更新/删除操作。但所有其他事情都没问题。

  3. 访问2010!数据库工具 - > SQL Server - > ...使用向导 - >模式和数据都可以。应用程序适用于从Access导入的SQL Server数据库。

  4. 所以从Access到SQL Server的直接导出给出了所需的结果。

答案 1 :(得分:2)

  1. 可能,但您仍需要测试。

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