0

これは、SQL のおかげで私には扱いにくいものです。私は4つのテーブルを持っています。私は、私が考える他の何よりも論理的な問題を抱えています。Vehicle というテーブルがあります。私のアプリケーションでは、この Vehicle テーブルで変更されたすべてのレコードが VLog テーブルに挿入されます。Vehicle の主キーは VehicleID で、VLog の VehicleID に関連付けられています。SQL では、これらのテーブルの両方をアーカイブする方法に自信がありません。2 つのアーカイブ テーブルがあります。VehicleArchive と VLogArchive。アプリケーション内で、特定のパラメータに基づいて特定のレコードを「アーカイブ」できます。グリッドビューを使用していたので、これは簡単で、VehicleID を確認し、その VehicleID を持つ任意のレコードを VLogArchive と VehicleArchive に挿入できました。しかし、私はライブ レコードを扱うつもりであり、SQL に解決策があるかどうか疑問に思っていました。VLog は Vehicle で行われたすべての変更を追跡するため、VLog の各 VehicleID には複数のレコードがあります。私のアプリケーション自体では、[更新] ボタンをクリックすると、グリッドビュー内の VehicleID と比較して VLog から VLogArchive にレコードを挿入し、VLog からそのレコードを削除して、場所を「ファイル ルーム. " 次に、場所が「File Room」である限り、レコードをグリッドビュー内の VehicleID と再度比較して、Vehicle から VehicleArchive にレコードを挿入します。逆に思えますが、VLog から関連レコードを削除する前に Vehicle からレコードを削除しようとすると、関連しているため削除されないため、この方法で行う必要がありました。

これこれを見つけましたが、これらが必要なアプローチであるとは確信していません。助けてくれてありがとう!

4

2 に答える 2

2

そのようにしないでください。アーカイブされた int(1) フィールドをテーブルに追加し、それを使用してビューをフィルタリングします。

車両

次に、これをグリッドビューのソースとして使用します

SELECT * FROM Vehicle WHERE Archived=0

アーカイブされたレコードを作成するには、次のことができます

UPDATE Vehicle SET Archived=1 WHERE ID=1

本番システムでこのようなレコードを移動することは決して容易ではなく、想像以上に多くの問題が発生することはほぼ確実です。

あなたが本当にこれをしたいのなら; 次に、レコードごとに実行する必要があります。データをコピーする。もちろん、これは参照整合性を壊します。他のテーブルが Vehicle を参照している場合は、手動で修正する必要があります。

これは、バックグラウンド プロシージャとしてコードで行うか、(より良い) db サーバーで SQL/SSIS を使用して行うことができます。

于 2013-10-29T13:40:55.443 に答える