0

私は毎日一般からの意見を受け取るシステムを持っています。毎朝、起動時に、最新の 500 エントリを超えるすべての入力をバックアップ テーブルに移動する VB スクリプトを実行したいと考えています。これは、システム アクティビティの完全なアーカイブのようなものです。

最初の500行(列kでソート)を超えるすべての行をあるテーブルから別のテーブルに移動(テーブル「アクティブ」からテーブル「アーカイブ」に行を挿入し、次にテーブル「アクティブ」から行を削除)したい。

これを単一の SQL ステートメントとして実行できることを望んでいましたが、あまり成功していません。これを単一の (ネストされた?) Jet SQL ステートメントとして行う合理的な方法はありますか? このアクションを処理するには、中間の VB スクリプトを作成する必要がありますか?

前もって感謝します、

4

2 に答える 2

0

古いレコードに何らかの方法でフラグを立てて、通常のユーザーが表示できないようにしないのはなぜですか? アーカイブ テーブルを使用すると、両方のテーブルのデータをクエリしたい場合などに苦労します。

于 2010-02-03T05:27:25.253 に答える
0

このようなことをしなければならないようです。

INSERT INTO ChatArchive (MsgId, MsgText, Filtered, LastFetched) SELECT MsgID, MsgText, Filtered, LastFetched FROM ChatCurrent WHERE ID <= (SELECT MAX(ID) from ChatCurrent) - 500;
DELETE FROM ChatCurrent WHERE MsgId <= (SELECT MAX(MsgId) FROM ChatArchive);

ここで 500 は、システムに残しておきたい行数です。別の方法は、MsgIds のリストを (VB の) どこかに保存し、そこから 2 番目のクエリを作成することです。

于 2010-02-03T04:22:12.503 に答える