Podría hacer esto con un CTE . Algo como esto:
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
Editar... SI opta por esta solución (tome nota del comentario de Aaron Bertrand debajo de mi respuesta), tenga en cuenta que también deberá especificar el recurrencia máxima si pretende tratar con rangos mayores a 3 meses. El valor predeterminado es 100. Esto significa que, tal como está escrita actualmente la consulta, solo realizará un máximo de 101 fechas (100 niveles de recursividad).
También puede especificar OPTION (MAXRECURSION 0)
al final del último SELECT
para superar esto. 0 significa infinitos niveles de recursividad. Pero de nuevo, toma nota de la publicación de Aaron.