2

私は古いC++MFCプロジェクト(> 10歳)に取り組んでいます。データベースアプリケーションは、MS Access(2007)からMS SQL Server(2008 R2)への移行で動作し、途中でいくつかのハードルに直面しました。データのエクスポートには、MS SQL Management Studio(メニューの[インポート]オプション)を使用しました。ご存知のとおり、AccessとMSSQLではデータ型にいくつかの違いがあります。それはいくつかの問題になりました。

  1. Accessの列"ID"(自動番号、NULLではなく、主キー)は、SQL Serverの通常の列(int、NULLではなく、自動インクリメントなし)になります。そのため、テーブルに新しい行を挿入するときに多くの間違いが発生しました。

  2. アクセスのはい/いいえタイプ(-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)を介して関連する外部キーの[アクションなし] ->[カスケード]を変更しました。その後、アプリケーションでの削除操作は成功しました。

私の質問は次のとおりです。

  1. データベースアプリケーションが完全に正しく機能するようにするには、 [アクションなし] -> [外部キーのカスケード]を変更するだけでよいのでしょうか?または、私が知らない別の問題が発生する可能性がありますか?
  2. どうすれば実現できますか?クライアントのSQLServerに適用するための優れたソリューションにしたいと思います。

助けてくれてありがとう、本当に感謝しています!

4

2 に答える 2

4

ご回答有難うございます。私の問題の解決策は...Access(2010)からSQLServerにデータを直接エクスポートすることです。私は試した:

  1. 「SQLServerのデータのインポートとエクスポート」、結果-Accessデータベースからのデータのみのコピー、プライマリ外部キーなし、自動番号のIDENTITYおよび自動インクリメント付きの列への変換なし。

  2. SQL Server Migration Assistant for Access、結果-多くの外部キーが更新/削除操作のためにCASCADEプロパティを失いました。しかし、他のすべてのものは大丈夫です。

  3. 2010にアクセス!データベースツール->SQLServer->...ウィザードの使用->スキーマとデータはすべて問題ありません。アプリケーションは、AccessからインポートされたSQLServerデータベースで正常に動作します。

したがって、AccessからSQLServerに直接エクスポートすると必要な結果が得られました。

于 2013-01-22T09:46:58.717 に答える
2
  1. おそらくですが、まだテストする必要があります。

  2. 再利用可能なソリューションとして、SSMA が作成したデータベースのスクリプトを作成します (すべての型と外部キーが正しいことを確認します)。このスクリプトを使用すると、任意の数のサーバーに空の SQL Server データベースを作成できます。これらのデータベースにデータを入力するには、Integration Services パッケージを使用します。インポート ウィザードを使用して作成するのは非常に簡単です。すべての手順を実行しますが、すぐに実行するのではなく、パッケージを保存します。その後、このパッケージを開いて編集できます (必要に応じて、データ変換またはその他のロジックを追加します)。

于 2013-01-10T10:36:03.210 に答える