私は古いC++MFCプロジェクト(> 10歳)に取り組んでいます。データベースアプリケーションは、MS Access(2007)からMS SQL Server(2008 R2)への移行で動作し、途中でいくつかのハードルに直面しました。データのエクスポートには、MS SQL Management Studio(メニューの[インポート]オプション)を使用しました。ご存知のとおり、AccessとMSSQLではデータ型にいくつかの違いがあります。それはいくつかの問題になりました。
Accessの列"ID"(自動番号、NULLではなく、主キー)は、SQL Serverの通常の列(int、NULLではなく、自動インクリメントなし)になります。そのため、テーブルに新しい行を挿入するときに多くの間違いが発生しました。
アクセスのはい/いいえタイプ(-1/0; NULLは許可されていません)はビット(1/0 / NULL)になります。ほとんどの場所で、等しくないことと比較されるため、作業のロジックが壊れてはなりません。 0:
query.Select().Buff( "ID"、&code).FromS( "%Table_Name%"、NULL).Where()。Str( "Aktiv <> 0").Execute();
解決策を探して、AccessにSSMA(SQL Server Migration Assistant)を使用するためのアドバイスを見ました。主キー/外部キーを再作成し、CHECK、インデックスを作成したので、はるかに優れており、より知的です。ただし、残念ながら、多くのFOREIGN KEYのアクションの更新/削除操作はカスケードではなく、アクションなしになります。スキーマインポート後の警告メッセージ:
MS Accessテーブル%Table1%のFOREIGNKEY制約"Reference77"により、循環パスまたは複数のカスケードパスが発生する可能性があります。SQL Serverでは、テーブル%Table2%からテーブル%Table1%へのカスケードオプションが[オプションなし]に設定されていました。
Accessではすべて問題ありませんでしたが、オブジェクトの削除中にアプリケーションでエラーが発生するのは当然のことです。テストのために、エラーが発生した(アプリケーションでの)削除操作を1つ選択しました。エラーメッセージを確認し、SSMS(SQL Server Management Studio)を介して関連する外部キーの[アクションなし] ->[カスケード]を変更しました。その後、アプリケーションでの削除操作は成功しました。
私の質問は次のとおりです。
- データベースアプリケーションが完全に正しく機能するようにするには、 [アクションなし] -> [外部キーのカスケード]を変更するだけでよいのでしょうか?または、私が知らない別の問題が発生する可能性がありますか?
- どうすれば実現できますか?クライアントのSQLServerに適用するための優れたソリューションにしたいと思います。
助けてくれてありがとう、本当に感謝しています!