The method below is math only, and thus very efficient; works under all date settings; and is flexible/reusable for other days / months / etc..
DECLARE @start_date date
SET @start_date = GETDATE()
;WITH
cteTally10 AS (
SELECT * FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) AS numbers(number)
),
cteTally100 AS (
SELECT ROW_NUMBER() OVER(ORDER BY c1.number) - 1 AS number
FROM cteTally10 c1
CROSS JOIN cteTally10 c2
)
SELECT DATEADD(DAY, -DATEDIFF(DAY, 0, @start_date) % 7,
DATEADD(DAY, -7 * week#.number, @start_date)) AS Monday
FROM cteTally100 week#
WHERE week#.number BETWEEN 0 AND 15
ORDER BY Monday;
SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.