Anda dapat melakukannya dengan CTE . Sesuatu seperti ini:
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
Sunting... JIKA Anda menggunakan solusi ini (perhatikan komentar Aaron Bertrand di bawah jawaban saya), perhatikan bahwa Anda juga harus menentukan rekursi maksimum jika Anda berniat untuk berurusan dengan rentang yang lebih besar dari 3 bulan. Default diatur ke 100. Ini berarti bahwa, karena kueri saat ini ditulis, kueri hanya akan melakukan maksimum 101 tanggal (100 tingkat rekursi).
Anda juga dapat menentukan OPTION (MAXRECURSION 0)
di akhir SELECT
. terakhir untuk mengatasi ini. 0 berarti tingkat rekursi tak terbatas. Tapi sekali lagi, perhatikan postingan Aaron.