;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
Debe recuperar las fechas, por lo que he usado una expresión de tabla común recursiva aquí. SQL Fiddle
número MAXRECURSION
Especifica el número máximo de recurrencias permitidas para esta consulta. number es un entero no negativo entre 0 y 32767. Cuando se especifica 0, no se aplica ningún límite. Si no se especifica esta opción, el límite predeterminado para el servidor es 100.
Cuando se alcanza el número predeterminado o especificado para el límite MAXRECURSION durante la ejecución de la consulta, la consulta finaliza y se devuelve un error.