Если вы используете SQL Server 2016 или выше, это решение не будет использовать некоторое время l oop, вместо этого оно использует CTE для генерации 30 строк с номерами от I до 30, а затем использует дату для преобразования в yyyymmdd
.
DECLARE @NUM_DAYS INT=30;
DECLARE @STARTDATE DATETIME='2020-01-01';
WITH CTE AS(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS SRL
FROM STRING_SPLIT(REPLICATE(',',@num_days-1), ',') AS A
)
INSERT INTO dbo.dateDimension
SELECT
CONVERT(INT, CONVERT(CHAR(8), DATEADD(DAY, SRL-1, @STARTDATE), 112))
, @STARTDATE
, YEAR(@STARTDATE)
, MONTH(@STARTDATE)
FROM CTE
SELECT * FROM dbo.dateDimension