I reckon that the whole thing can be done a lot simpler in SQL Server 2005/2008 (and 2000 if you don't have that many archives). I couldn't do all the testing as I don't have the archives.
CREATE PROCEDURE archiveLogs AS SET NOCOUNT ON ; DECLARE @SQL VARCHAR(MAX) SELECT @SQL='' SELECT @SQL=COALESCE(@SQL, '')+' SELECT * INTO archiveLogs.dbo.'+name+' FROM '+name +' BACKUP DATABASE archiveLogs TO DISK = ''D:\DB Backups\LIVE_BACKEND_archiveLogs_' +name +''' WITH NOFORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10 DROP TABLE archiveLogs.dbo.'+name+' DROP TABLE logs.dbo.'+name+' ' FROM sysobjects WHERE xtype='u' AND LEN(name)=11 AND LEFT(name, 4)='Logs' AND SUBSTRING(name, 9, 1)='_' AND name<'Logs'+DATENAME(YYYY, DATEADD(MM, -13, GETDATE()))+'_' +RIGHT('0'+CONVERT(VARCHAR(2), DATEPART(month, DATEADD(MM, -13, GETDATE()))), 2) ORDER BY name IF NOT @SQL='' EXEC (@sql)