• I really liked your calendar idea, so I amended it a bit for my use..

    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[calendar2print]') AND type in (N'P', N'PC'))

    DROP PROCEDURE [dbo].calendar2print

    GO

    /***************************************************************************************

    Created By :- Vinay Kumar

    Created on :- 29 Jan 2008

    EXEC calender '01/01/2016'

    Purpose :- Print the calender from the given Date until end of current year

    ------------------------------------

    Amended by Hannes Malan

    Amended On :- Aug 13, 2012

    EXEC calendar2print @StartDate=null, @fullmonth=1, @months=1

    Purpose :- Print the calender from the given Date ...

    ..and if @StartDate is null, use current date(@StartDate)

    ..also from specified date or from first day of specified month (@fullmonth)

    ..for a certain amount of months(@months)

    ****************************************************************************************/

    Create Procedure calendar2print

    @StartDate DateTime

    ,@fullmonth int = 1

    ,@months int = 1

    As

    set nocount on

    if @StartDate is null set @StartDate = getdate()

    if (@fullmonth = 1) begin

    set @StartDate = '01 ' + datename(mm,@StartDate) +' '+ datename(yy,@StartDate)

    end

    set datefirst 7

    DECLARE @tbl Table(RowID int identity(1,1), Sun varchar(20) default '', Mon varchar(20) default '', Tue varchar(20) default '',

    Wed varchar(20) default '', Thu varchar(20) default '', Fri varchar(20) default '', Sat varchar(20) default '')

    declare @monthCount int

    set @monthCount = 1

    DECLARE @currentMonth int

    DECLARE @CurrentDate int

    DECLARE @CurrentDay int

    DECLARE @CurrentRowID int

    DECLARE @TotalMonthDays int

    DECLARE @monthName varchar(20)

    set @CurrentDate = datepart(dd, @StartDate)

    set @currentMonth = datepart(mm, @StartDate)

    set @CurrentDay = datepart(dw, @StartDate)

    insert @tbl(Mon) values ('')

    set @CurrentRowID = @@Identity

    while @monthCount <= @months begin

    set @monthCount = @monthCount + 1

    set @TotalMonthDays = case when month(@StartDate) in (1,3,5,7,8,10,12) then 31

    when month(@StartDate) in (4,6,9,11) then 30

    when month(@StartDate) = 2 and year(@StartDate) % 4 = 0 then 29

    when month(@StartDate) = 2 and year(@StartDate) % 4 <> 0 then 28

    end

    set @monthName = datename(m, @StartDate)

    insert @tbl(Tue, Thu) values (@monthName, Convert(Varchar, year(@StartDate)))

    set @CurrentRowID = @@Identity

    insert @tbl(Sun,Mon,Tue,Wed, Thu, Fri,Sat) values ('_______', '_______', '_______', '_______', '_______', '_______', '_______')

    insert @tbl(Sun) values ('')

    set @CurrentRowID = @@Identity

    while @CurrentDate <= @TotalMonthDays begin

    if @CurrentDay = 1 begin

    insert @tbl(Sun) values ('')

    set @CurrentRowID = @@Identity

    end

    if @CurrentDay = 1

    update @tbl set Sun = Convert(Varchar(2), @CurrentDate) where RowID = @CurrentRowID

    else if @CurrentDay = 2

    update @tbl set Mon = Convert(Varchar(2), @CurrentDate) where RowID = @CurrentRowID

    else if @CurrentDay = 3

    update @tbl set Tue = Convert(Varchar(2), @CurrentDate) where RowID = @CurrentRowID

    else if @CurrentDay = 4

    update @tbl set wed = Convert(Varchar(2), @CurrentDate) where RowID = @CurrentRowID

    else if @CurrentDay = 5

    update @tbl set Thu = Convert(Varchar(2), @CurrentDate) where RowID = @CurrentRowID

    else if @CurrentDay = 6

    update @tbl set Fri = Convert(Varchar(2), @CurrentDate) where RowID = @CurrentRowID

    else if @CurrentDay = 7

    update @tbl set Sat = Convert(Varchar(2), @CurrentDate) where RowID = @CurrentRowID

    set @CurrentDate = @CurrentDate + 1

    if @CurrentDate = @TotalMonthDays + 1 begin

    IF (Datepart(DD,@StartDate)>1)

    set @StartDate = DATEADD(Day,-(Datepart(DD,@StartDate)-1),@StartDate)

    set @StartDate = DATEADD(Month,1,@StartDate)

    set @CurrentDay = datepart(dw, @StartDate)

    insert @tbl(Sun,Mon,Tue,Wed,Thu,Fri,Sat)

    values ('*******', '*******', '*******', '*******', '*******', '*******', '*******')

    end else begin

    set @CurrentDay = (@CurrentDay + 1) % 8

    if (@CurrentDay = 0) set @CurrentDay = 1

    end

    end

    set @CurrentDate = 1

    end

    -- Finaly show the output

    select Sun, Mon, Tue, Wed, Thu, Fri, Sat

    from @tbl

    where Mon <> '' or Tue <> '' or Wed <> ''

    or Thu <> '' or Fri <> '' or Sat <> '' or Sun <> ''