Sie könnten dies mit einem rekursiven CTE
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
Bearbeiten... Wenn Sie sich für diese Lösung entscheiden (beachten Sie den Kommentar von Aaron Bertrand unter meiner Antwort), beachten Sie, dass Sie auch maximale Rekursion wenn Sie beabsichtigen, mit Reichweiten von mehr als 3 Monaten umzugehen. Der Standardwert ist auf 100 eingestellt. Dies bedeutet, dass die Abfrage, wie sie derzeit geschrieben ist, nur maximal 101 Daten (100 Rekursionsebenen) verarbeitet.
Sie können zusätzlich OPTION (MAXRECURSION 0)
angeben am Ende des letzten SELECT
um dies zu überwinden. 0 bedeutet unendliche Rekursionsebenen. Beachten Sie aber noch einmal Aarons Beitrag.