;with d(date) as (
select cast('10/01/2012' as datetime)
union all
select date+1
from d
where date < '10/15/2012'
)
select t.ID, d.date CDate, isnull(t.val, 0) val
from d
left join temp t
on t.CDate = d.date
order by d.date
OPTION (MAXRECURSION 0) -- use this if your dates are >99 days apart
Du måste göra upp datumen, så jag har använt ett rekursivt vanligt tabelluttryck här.SQL Fiddle
MAXRECURSION nummer
Anger det maximala antalet tillåtna rekursioner för den här frågan. nummer är ett icke-negativt heltal mellan 0 och 32767. När 0 anges tillämpas ingen gräns. Om detta alternativ inte anges är standardgränsen för servern 100.
När det angivna numret eller standardnumret för MAXRECURSION-gränsen nås under queryexecution, avslutas frågan och ett fel returneras.