Use CardioLog GO set nocount on declare @bulksize int declare @delay char(8) declare @endDate datetime declare @startDate datetime declare @rowsDone int declare @totalRows int -- Stop CardioLog Scheduling Service before executing this script -- EDIT THE @startDate AND @endDate in the following format: 'YYYY-MM-DD HH:MM' -- example: -- set @startDate = '2012-01-01 00:00' -- set @endDate = '2012-01-31 23:59' set @startDate = '2012-01-01 00:00' set @endDate = '2012-01-01 00:00' set @rowsDone = 0 set @bulksize = 5000 set @delay = '00:00:00' set @totalRows = 0 if object_id('tempdb..#rows2dlt') is not null drop table #rows2dlt -- create temp table select top 0 eventlogId,SPLocation into #rows2dlt from tab_event_log create clustered index ix1 on #rows2dlt ([eventlogId]) select @totalRows = count(1) from tab_event_log where [timestamp] between @startDate AND @endDate print 'should update '+cast(@totalrows as varchar(max)) + ' rows' insert into #rows2dlt (eventlogId,SPLocation) select top (@bulksize) eventlogId,SPLocation from tab_event_log where [timestamp] between @startDate AND @endDate while @@rowCount > 0 begin delete from tab_event_log_users where eventlogid in (select eventlogId from #rows2dlt) delete from tab_event_log where eventlogId in (select eventlogId from #rows2dlt) delete from tab_geo_log where eventlogId in (select eventlogId from #rows2dlt) delete from tab_goal_test_log where eventlogId in (select eventlogId from #rows2dlt) delete from tab_test_log where eventlogId in (select eventlogId from #rows2dlt) delete from tab_referrer_log where eventlogId in (select eventlogId from #rows2dlt) delete from tab_goal_log where eventlogId in (select eventlogId from #rows2dlt) delete from summary_referrer where spLocation in (select spLocation from #rows2dlt) select @totalRows = @totalRows - @@rowCOunt, @rowsDOne = @rowsDOne + @@rowCount --print convert(varchar(max), getdate(), 121)+ ' - ' +cast(@totalRows as varchar(max)) + ' rows left, '+ --'estimated time left : ' + convert(varchar(10),dateadd(s, @totalRows/(@rowsDone / (datediff(s, @startDate, getdate())+1)),0),108) waitfor delay @delay truncate table #rows2dlt insert into #rows2dlt (eventlogId,SPLocation) select top (@bulksize) eventlogId,SPLocation from tab_event_log where [timestamp] between @startDate AND @endDate end print 'Done'