1. Generate Calendar Dimension in SQL Server

To generate Dim table we can make use of recursive CTE and using date functions.

with cte as

(

select cast('2000-01-01' as date) as cal_date

,datepart(year,'2000-01-01') as cal_year

,datepart(dayofyear, '2000-01-01') as cal_year_day

,datepart(quarter, '2000-01-01') as cal_quarter

,datepart(month, '2000-01-01') as cal_month

,datename(month, '2000-01-01') as cal_month_name

,datepart(day, '2000-01-01') as cal_month_day

,datepart(week, '2000-01-01') as cal_week

,datepart(weekday, '2000-01-01') as cal_week_day

,datename(weekday, '2000-01-01') as cal_day_name

union all

select cast(dateadd(day,1,cal_date) as date) as cal_date

,datepart(year,dateadd(day,1,cal_date)) as cal_year

,datepart(dayofyear, dateadd(day,1,cal_date)) as cal_year_day

,datepart(quarter, dateadd(day,1,cal_date)) as cal_quarter

,datepart(month, dateadd(day,1,cal_date)) as cal_month

,datename(month, dateadd(day,1,cal_date)) as cal_month_name

,datepart(day, dateadd(day,1,cal_date)) as cal_month_day

,datepart(week, dateadd(day,1,cal_date)) as cal_week

,datepart(weekday, dateadd(day,1,cal_date)) as cal_week_day

,datename(weekday, dateadd(day,1,cal_date)) as cal_day_name

from cte where cal_date <= cast('2023-01-01' as date)

)

select * from cte

option(maxrecursion 5000)