• Could it all be as simple this: a single delete operation that leverages an output clause to insert deleted rows into a history table? If this were to be scheduled to execute every hour (instead of daily or every five days) then it will roll over a few hundred thousand rows at a time into the history table, and it's all included in a single implicit transaction.

    create table PrintJobs

    (

    JobID int not null identity(1,1) primary key

    , PrintDate datetime default getdate()

    );

    create index ix_PrintDate on PrintJobs ( PrintDate );

    create table PrintJobsHistory

    (

    JobID int not null primary key

    , PrintDate datetime

    );

    delete from PrintJobs

    output deleted.JobID, deleted.PrintDate

    into PrintJobsHistory ( JobID, PrintDate )

    where datediff( day, PrintDate, getdate() ) > 5;

    "Do not seek to follow in the footsteps of the wise. Instead, seek what they sought." - Matsuo Basho