Try this version - You will have to run one month at a time. I've also added the blanks if the last day of the month is not a Sunday e.g. Try he month of August 2015.
declare @start_date datetime, @end_date datetime, @cur_date datetime
set @start_date = '2015-05-01'
set @end_date = '2015-05-31'
set @cur_date = @start_date
create table #tmp
(weekday varchar(10),
date varchar(2),
month varchar(10),
year int)
while datepart(dw, @cur_date) > 2
begin
insert into #tmp
select datename(dw, dateadd(dd, -(datepart(dw, @cur_date) - 2), @start_date)), '', datename(month, @start_date), datepart(year, @start_date)
set @cur_date = dateadd(dd, -1, @cur_date)
end
set @cur_date = @start_date
while @cur_date <= @end_date
begin
insert into #tmp
select datename(dw, @cur_date), datepart(day, @cur_date), datename(month, @cur_date), datepart(year, @cur_date)
set @cur_date = dateadd(dd, 1, @cur_date)
end
set @cur_date = @end_date
while datepart(dw, @cur_date) > 1
begin
insert into #tmp
select datename(dw, dateadd(dd, 1, @cur_date)), '', datename(month, @end_date), datepart(year, @end_date)
set @cur_date = dateadd(dd, 1, @cur_date)
end
select * from #tmp
drop table #tmp
Hope this helps.