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');