我正在处理旧的 C++ MFC 项目(> 10 岁)。数据库应用程序适用于从 MS Access (2007) 迁移到 MS SQL Server (2008 R2),我在此过程中遇到了一些障碍。对于导出数据,我使用了 MS SQL Management Studio(菜单中的“导入”选项)众所周知,Access 和 MS SQL 之间的数据类型存在一些差异。这变成了一些麻烦。
Access 中的“ID”列(Autonumber,不是 NULL,主键)成为 SQL Server 中的普通列(int,不是 NULL 并且没有任何自动增量)。所以我在向表中插入新行时遇到了很多错误。
Access 中的Yes/No类型(-1/0;不允许 NULL)变为位(1/0/NULL),工作逻辑不应被破坏,因为在大多数情况下它是不等于的比较0:
query.Select() .Buff("ID", &code) .FromS("%Table_Name%", NULL) .Where().Str("Aktiv <> 0") .Execute();
在寻找解决方案时,我看到了使用 SSMA(SQL Server 迁移助手)进行访问的建议。它更好,更智能,因为它重新创建了主键/外键,创建了 CHECK,索引。但不幸的是,许多 FOREIGN KEYs 的操作 Update/Delete 操作不是Cascade而是No Action。架构导入后的警告消息:
MS Access 表 %Table1% 上的 FOREIGN KEY 约束“Reference77”可能会导致循环或多个级联路径。从表%Table2%到表%Table1%的级联选项在 SQL Server 中设置为无选项。
这并不奇怪应用程序在删除对象时会出现一些错误,尽管在 Access 中一切正常。为了测试,我选择了一个出现错误的删除操作(在应用程序中)。我查看了错误消息并通过 SSMS(SQL Server Management Studio)更改了所涉及的外键的无操作->级联。之后应用程序中的删除操作成功。
我的问题是:
- 我对吗?我只需要更改No Action -> Cascade for the FOREIGN KEYs 即可让数据库应用程序完全正常工作?还是会出现其他我不知道的问题?
- 如何实现?我希望它是在客户的 SQL Server 上应用它的一个很好的解决方案。
感谢您的帮助,我真的很感激!