Du kan göra detta med en rekursiv CTE . Något så här:
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
Redigera... OM du väljer den här lösningen (notera Aaron Bertrands kommentar under mitt svar), notera att du också måste ange max rekursion om du har för avsikt att hantera intervall över 3 månader. Standardinställningen är 100. Detta innebär att, eftersom frågan för närvarande skrivs, kommer den endast att göra maximalt 101 datum (100 nivåer av rekursion).
Du kan dessutom ange OPTION (MAXRECURSION 0)
i slutet av den sista SELECT
att övervinna detta. 0 betyder oändliga nivåer av rekursion. Men återigen, notera Arons inlägg.