Here you go, try this. You'll need a Tally table first (see here[/url]):
DECLARE @startDate datetime, @endDate DATETIME
SELECT @startDate = '20090101', -- First day in range
@endDate = '20090401' -- Day *after* last day
--==
--== Note that my tally table starts at 1 hence the N-1 below
--==
SELECT
DATEADD(dd,n-1,@startDate)
FROM
Tally
WHERE
N <= DATEDIFF(dd,@startDate,@endDate) AND
--==
--== Adding the day of the week to the @@DATEFIRST value then doing MOD 7
--== normalizes the result to be independent of the DATEFIRST setting
--== 6 just happens to be Friday
--==
(DATEPART(dw,DATEADD(dd,n-1,@startDate)) + @@DATEFIRST) % 7 = 6
You could put it in a stored procedure with the start date, end date and day of week you're interested in as parameters.
It isn't all that different from using a calendar table. But you seemed concerned about the storage requirements. A Tally table would use less space.
There are other ways without using a tally table - common table expressions and ROW_NUMBER are just two (if you're using 2005 or above).
Nigel