Taking a crack at this... Try this article:
With a tally table, you could whip up something like this; note that my naming is a bit sketchy, because this is going to be mostly a test of concept:
SELECT TOP 11000 --equates to more than 30 years of dates
IDENTITY(INT,1,1) AS N INTO #Tally
FROM Master.dbo.SysColumns sc1,
Master.dbo.SysColumns sc2
--===== Add a Primary Key to maximize performance
ALTER TABLE #Tally ADD CONSTRAINT PK_Tally_N
PRIMARY KEY CLUSTERED (N) WITH FILLFACTOR = 100
SELECT N,CONVERT(DateTime,32500+N) AS Dates
INTO #Temp
FROM #Tally
ORDER BY 32500+N ASC
SELECT N,CONVERT(DateTime,32500+N) AS Dates
INTO #Temp2
FROM #Tally
SELECT b.Dates,a.Dates FROM #Temp2 a
INNER JOIN #Temp b
ON a.N >= B.N AND a.N < b.N+7
WHERE DATEPART(DW,b.Dates) = 4
ORDER BY b.Dates ASC
This is going to give you a set of dates from 1988 to 2019, and a pair of columns; one will have the Wednesday of a particular week (your "starting point", in essence), and the other will contain all of the dates that would fall into this week. The dates will "belong" to the week on the left; in essence, you'd run an update from here to set the actual date to the "starting point" date.
This is a rough conceptual example, since we don't have sample data and so forth; this code will probably need a good bit of adaptation, but it should be a good starting point. Please include table definitions and sample data if you'd like more clarification.
- 😀