create table WorkWeek ( yr int, ISOWeek int, Monday datetime, Sunday datetime, CONSTRAINT pk_WorkWeek PRIMARY KEY (yr,ISOWeek) ) set datefirst 1 select top 54 identity(int,0,1) as wk into WeekNums from Northwind..Orders go create procedure BuildWW ( @year char(4) ) as select cast(@year as int) as yr, wk + 1 as ISOWeek, cast(@year+'0104' as datetime) + (7*wk - (datepart(dw,cast(@year+'0104' as datetime)) - 1)) as Monday, cast(@year+'0104' as datetime) + (7*wk + 6 - (datepart(dw,cast(@year+'0104' as datetime)) - 1)) as Sunday from WeekNums where cast(@year+'0104' as datetime) + (7*wk - (datepart(dw,cast(@year+'0104' as datetime)) - 1)) <= cast(@year+'1228' as datetime) go declare @y int set @y = 2002 while @y < 2003 begin insert into Workweek exec BuildWW @y set @y = @y + 1 end select yr, ISOWeek, convert(varchar,Monday,107) as Monday, convert(varchar,Sunday,107) as Sunday from WorkWeek drop table WorkWeek drop procedure BuildWW drop table WeekNums