Yo crearía dos tablas - una de años y la otra de los 12 meses:
Código SQL:
Ver originalDECLARE @Desde DATE='20101101',
@Hasta DATE='20120930';
SELECT *
FROM Anos A
CROSS JOIN Meses M
WHERE 100*A.Numero+M.Numero BETWEEN CAST(CONVERT(CHAR(6),@Desde,112) AS INT) AND CAST(CONVERT(CHAR(6),@Hasta,112) AS INT);
Cross Join es Join sin las condiciones On.
En el Where convierto las fechas en números, por ejemplo 2010/11/01 es 201011, y 2012/09/30 es 201209.