Vous pouvez le faire avec un CTE . Quelque chose comme ça :
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
Modifier... SI vous optez pour cette solution (prenez note du commentaire d'Aaron Bertrand sous ma réponse), notez que vous devrez également spécifier le récursivité maximale si vous avez l'intention de traiter des plages supérieures à 3 mois. La valeur par défaut est 100. Cela signifie que, comme la requête est actuellement écrite, elle ne fera qu'un maximum de 101 dates (100 niveaux de récursivité).
Vous pouvez également spécifier OPTION (MAXRECURSION 0)
à la fin du dernier SELECT
pour surmonter cela. 0 signifie des niveaux infinis de récursivité. Mais encore une fois, prenez note du message d'Aaron.