But recursion is a very inefficient way to loop / gen numbers. And a simple date calc can avoid any issues/concerns with datefirst. The code below is far more efficient and works under any/all datefirst settings.
;WITH
cteTally10 AS (
SELECT * FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) AS numbers(number)
),
cteTally1000 AS (
SELECT ROW_NUMBER() OVER(ORDER BY c1.number) - 1 AS number
FROM cteTally10 c1
CROSS JOIN cteTally10 c2
CROSS JOIN cteTally10 c3
),
cteJan07 AS (
SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 6) AS Jan07
),
cteJanFirstFriday AS (
SELECT DATEADD(DAY, -DATEDIFF(DAY, 4, Jan07) % 7, Jan07) AS JanFirstFriday
FROM cteJan07
)
SELECT DATEADD(DAY, 7 * t.number, JanFirstFriday) AS StartDate,
DATEADD(DAY, 7 * t.number + 7, JanFirstFriday) AS EndDate
FROM cteTally1000 t
CROSS JOIN cteJanFirstFriday
WHERE t.number <= 110 AND YEAR(DATEADD(DAY, 7 * t.number, JanFirstFriday)) <= YEAR(GETDATE()) + 1
Open in new window