Du kunne gøre dette med en rekursiv CTE . Noget som dette:
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
Rediger... HVIS du går med denne løsning (læg mærke til Aaron Bertrands kommentar under mit svar), bemærk, at du også skal angive maksimal rekursion hvis du har til hensigt at beskæftige dig med intervaller på mere end 3 måneder. Standarden er sat til 100. Det betyder, at som forespørgslen er skrevet i øjeblikket, vil den kun udføre maksimalt 101 datoer (100 niveauer af rekursion).
Du kan desuden angive OPTION (MAXRECURSION 0)
i slutningen af den sidste SELECT
at overvinde dette. 0 betyder uendelige niveauer af rekursion. Men igen, læg mærke til Aarons indlæg.