• Another way to print a calendar using PIVOT:

    CREATE FUNCTION CalenderUsingPivot

    (

    @BeginDate date

    , @EndDate date

    )

    RETURNS @Calendar TABLE

    (

    Week tinyint

    , Monday tinyint

    , Tuesday tinyint

    , Wednesday tinyint

    , Thursday tinyint

    , Friday tinyint

    , Saturday tinyint

    , Sunday tinyint

    )

    AS

    BEGIN

    DECLARE @date TABLE

    (

    Date date

    , Day AS DAY(Date)

    , Week AS DATEPART(week, Date)

    , Weekday AS DATENAME(weekday, Date)

    );

    DECLARE @i date;

    SET @i = @BeginDate;

    WHILE @i <= @EndDate

    BEGIN

    INSERT @date VALUES (@i);

    SET @i = DATEADD(day, 1, @i);

    END;

    INSERT @Calendar

    SELECT

    Week

    , p.Monday

    , p.Tuesday

    , p.Wednesday

    , p.Thursday

    , p.Friday

    , p.Saturday

    , p.Sunday

    FROM

    (

    SELECT Day, Week, Weekday

    FROM @date

    ) AS c

    PIVOT

    (

    MAX(Day) FOR Weekday IN

    (

    Monday

    , Tuesday

    , Wednesday

    , Thursday

    , Friday

    , Saturday

    , Sunday

    )

    ) AS p

    ORDER BY Week;

    RETURN;

    END;

    GO

    SET LANGUAGE English;

    SELECT *

    FROM dbo.CalenderUsingPivot('2012-01-01', '2012-12-31');