;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
Você precisa criar as datas, então usei uma expressão de tabela comum recursiva aqui.SQL Fiddle
MAXRECURSION número
Especifica o número máximo de recursões permitidas para esta consulta. number é um inteiro não negativo entre 0 e 32767. Quando 0 é especificado, nenhum limite é aplicado. Se esta opção não for especificada, o limite padrão para o servidor é 100.
Quando o número especificado ou padrão para o limite MAXRECURSION é atingido durante a execução da consulta, a consulta é encerrada e um erro é retornado.