Можете да направите това с рекурсивен 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
Редактиране... АКО все пак изберете това решение (обърнете внимание на коментара на Арън Бертран под моя отговор), имайте предвид, че ще трябва също да посочите максимална рекурсия ако възнамерявате да работите с диапазони, по-големи от 3 месеца. По подразбиране е зададено 100. Това означава, че тъй като заявката е написана в момента, тя ще изпълни само максимум 101 дати (100 нива на рекурсия).
Можете допълнително да посочите OPTION (MAXRECURSION 0)
в края на последния SELECT
да преодолее това. 0 означава безкрайни нива на рекурсия. Но отново, обърнете внимание на публикацията на Арън.