'Can't insert data in table [closed]

DECLARE @DateDim TABLE  
                 (
                     [FullDate] [datetime] NOT NULL,
                     [Year] [smallint] NOT NULL,
                     [HalfYear] [tinyint] NOT NULL,
                     [Quarter] [tinyint] NOT NULL,
                     [MonthNumOfYear] [tinyint] NOT NULL,
                     [MonthName] [nvarchar](30) NOT NULL,
                     [DayNumOfMonth] [tinyint] NOT NULL,
                     [DayNameOfWeek] [nvarchar](30) NOT NULL,
                     [WeekNumOfMonth] [tinyint] NOT NULL
                 )

DECLARE 
    @Start_Date datetime,
    @End_Date datetime

SET @Start_Date = '1996-07-03 00:00:00.000'
SET @End_Date = '2096-07-03 00:00:00.000'

WHILE (@Start_Date < @End_Date)
BEGIN 
    SET @Start_Date = DATEADD(day, 1, @Start_Date)

    INSERT INTO [dbo].[DateDim]
    VALUES (@Start_Date, 
            DATEPART(year, @Start_Date), 
            CASE
                WHEN DATEPART(month, @Start_Date) BETWEEN 1 AND 6
                    THEN 1
                WHEN DATEPART(month, @Start_Date) BETWEEN 7 AND 12
                    THEN 2
            END,
            DATEPART(quarter, @Start_Date),
            DATEPART(month, @Start_Date),
            DATENAME(month, @Start_Date),
            DATEPART(day, @Start_Date),
            DATENAME(weekday, @Start_Date),
            CASE 
                WHEN DATEPART(day , @Start_Date) BETWEEN 1 AND 7
                    THEN 1
                WHEN DATEPART(day , @Start_Date) BETWEEN 8 AND 14
                    THEN 2
                WHEN DATEPART(day , @Start_Date) BETWEEN 15 AND 21      
                    THEN 3
                WHEN DATEPART(day , @Start_Date) BETWEEN 22 AND 28
                    THEN 4
                WHEN DATEPART(day , @Start_Date) BETWEEN 29 AND 31
                    THEN 5
             END)
  END

  SELECT * FROM @DateDim

Getting an error:

An explicit value for the identity column in table 'dbo.DateDim' can only be specified when a column list is used and IDENTITY_INSERT is ON.

while trying to insert the data using this script into the table.



Solution 1:[1]

As I said in comments you are declaring a @DateDim but trying to insert into another table named [dbo].[DateDim]. That is likely a typo. Also any fields other than FullDate are computed. Youy could write this simplified:

DECLARE @DateDim TABLE([FullDate] [DATETIME] NOT NULL,
[Year] AS DATEPART(YEAR, FullDate),
[HalfYear] AS CASE WHEN DATEPART(MONTH, FullDate) BETWEEN 1 AND 6 THEN 1
              WHEN DATEPART(MONTH, FullDate) BETWEEN 7 AND 12 THEN 2 END,
[Quarter] AS DATEPART(QUARTER, FullDate),
[MonthNumOfYear] AS DATEPART(MONTH, FullDate),
[MonthName] AS DATENAME(MONTH, FullDate),
[DayNumOfMonth] AS DATEPART(DAY, FullDate),
[DayNameOfWeek] AS DATENAME(WEEKDAY, FullDate),
[WeekNumOfMonth] AS CASE WHEN DATEPART(DAY, FullDate) BETWEEN 1 AND 7 THEN 1
                    WHEN DATEPART(DAY, FullDate) BETWEEN 8 AND 14 THEN 2
                    WHEN DATEPART(DAY, FullDate) BETWEEN 15 AND 21 THEN 3
                    WHEN DATEPART(DAY, FullDate) BETWEEN 22 AND 28 THEN 4
                    WHEN DATEPART(DAY, FullDate) BETWEEN 29 AND 31 THEN 5 END);

DECLARE @Start_Date DATETIME, @End_Date DATETIME;
SET @Start_Date='1996-07-03 00:00:00.000';
SET @End_Date='2096-07-03 00:00:00.000';

WITH tally(N) AS (SELECT TOP(DATEDIFF(DAY, @Start_Date, @End_Date))ROW_NUMBER() OVER (ORDER BY t1.object_id)
                  FROM sys.all_columns t1
                       CROSS JOIN sys.all_columns t2)
INSERT INTO @DateDim(FullDate)
SELECT DATEADD(DAY, N, @Start_Date)FROM tally;

SELECT * FROM @DateDim ORDER BY FullDate DESC;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1