Я использую своего рода «общий код», который я создал несколько лет назад для архивов, и он работает довольно хорошо. Я немного адаптировался для вас.
Предполагается, что у вас есть поле с именем DateRecord с датой, когда запись была добавлена или изменена последней. Кроме того, у вас есть ProdDB и ArchiveDB и одна таблица с такой же структурой в ProdDB, что и в ArchiveDB, за исключением того, что идентификатор в ArchiveDB не может быть IDENTITY, но может иметь УНИКАЛЬНЫЙ индекс:
-- Deletes from the Archive if older than one year
DELETE FROM ArchiveDB.dbo.YourTable
WHERE DateDiff(d, DateRecord, GetDate()) > 365
-- Insert into the ArchiveDB table if older than 30 days (set your request here)
INSERT INTO ArchiveDB.dbo.YourTable
SELECT * FROM ProdDB.dbo.YourTable SRC
WHERE DateRecord < DATEADD(d, -30, GETDATE())
AND NOT EXISTS (
SELECT 1 FROM ArchiveDB.dbo.YourTable DST
WHERE SRC.[ID] = DST.[ID] )
-- Delete from ProdDB if older than 30 days and has been moved to the ArchiveDB
DELETE FROM ProdDB.dbo.YourTable
WHERE DateRecord < DATEADD(d, -30, GETDATE())
AND EXISTS (
SELECT 1 FROM ArchiveDB.dbo.YourTable DST
WHERE [ID] = DST.[ID] )