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