Here is another way of doing it using a CTE instead of a table, but I don't understand the request that the report shouldn't use another table. Who cares what happened behind the scenes if the report brings the requested data and has no performance problems?
declare @date datetime
set @date = '20090501';
with DaysInMonth as (
select @date as Date
union all
select dateadd(dd,1,Date)
from DaysInMonth
where month(date) = month(@Date))
select * from DaysInMonth where month(date) = month(@Date)
Adi
--------------------------------------------------------------
To know how to ask questions and increase the chances of getting asnwers:
http://www.sqlservercentral.com/articles/Best+Practices/61537/
For better answers on performance questions, click on the following...
http://www.sqlservercentral.com/articles/SQLServerCentral/66909/