Как переместить (INSERT + DELETE) последние n строк из таблицы в Jet SQL / Access 2003? - PullRequest
0 голосов
/ 03 февраля 2010

У меня есть система, которая получает информацию от общественности каждый день. Каждое утро, когда он запускается, я хочу запускать VB-скрипт, который перемещает каждый вход за последние 500 записей в резервную таблицу. Это своего рода полный архив системной активности.

Я хочу переместить (вставить строку из таблицы 'active' в таблицу 'archive', а затем УДАЛИТЬ строку из таблицы 'active') каждую строку за пределы начальных 500 строк (отсортированных по столбцу k) из одной таблицы в другую. 1003 *

Я надеялся, что смогу сделать это как один оператор SQL, но не добился большого успеха. Есть ли разумный способ сделать это как один (вложенный?) Оператор Jet SQL? Придется ли писать какой-нибудь промежуточный скрипт VB для выполнения этого действия?

Заранее спасибо,

Ответы [ 2 ]

0 голосов
/ 03 февраля 2010

Почему бы просто не пометить старые записи каким-либо образом, чтобы они больше не были доступны для просмотра обычным пользователям?Использование архивной таблицы будет затруднительным, если вы захотите запросить данные в обеих таблицах и т. Д. И т. Д.

0 голосов
/ 03 февраля 2010

Похоже, мне, возможно, придется сделать что-то вроде этого.

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) и построение второго запроса из этого.

...