U kunt dit doen met een recursieve CTE . Zoiets als dit:
DECLARE @startDate datetime = '2/1/2014'
DECLARE @endDate datetime = '2/6/2014'
;WITH DateRange(RunningDate) AS
(
SELECT @startDate AS RunningDate
UNION ALL
SELECT RunningDate + 1
FROM DateRange
WHERE RunningDate < @endDate
)
SELECT id, RunningDate date, value1, value2
FROM DateRange LEFT JOIN myTable ON myTable.date = DateRange.RunningDate
Bewerken... ALS je voor deze oplossing kiest (let op de opmerking van Aaron Bertrand onder mijn antwoord), houd er dan rekening mee dat je ook de max recursie als u van plan bent om te gaan met reeksen van meer dan 3 maanden. De standaard is ingesteld op 100. Dit betekent dat, aangezien de query momenteel is geschreven, deze maximaal 101 datums zal doen (100 niveaus van recursie).
U kunt bovendien OPTION (MAXRECURSION 0)
. specificeren aan het einde van de laatste SELECT
om dit te overwinnen. 0 betekent oneindige niveaus van recursie. Maar nogmaals, let op Aarons post.