[英]SQL can't insert data for time dimension table
I am building a Data warehouse for my school project. 我正在为学校项目建立一个数据仓库。 I have already created my time dimension table and it works.
我已经创建了时间维度表,并且可以使用。
` CREATE TABLE TimeDim(
[timeCode] int primary key,
[date] datetime,
[year] char(4),
[month] varchar(2),
[monthName] varchar(9),
[Quarter] varchar(9),
[dayOfMonth] varchar(2),
[dayName] varchar(9),
[dayOfQuarter] varchar(3),
[dayOfYear] varchar(3),
[weekOfMonth] varchar(1),
[weekOfQuarter] varchar(2),
[weekOfYear] varchar(2));`
However, the errors occur when I try to create data in the Time Dimension table.The error shows: ** 但是,当我尝试在时间维度表中创建数据时会发生错误。错误显示:**
`Msg 213, Level 16, State 1, Line 95
Column name or number of supplied values does not match table definition.`
** The code for me to create data is **我创建数据的代码是
DECLARE @StartDate DATETIME = '01/01/2003' --Starting value of Date Range
DECLARE @EndDate DATETIME = '01/01/2006' --End Value of Date Range ( end at 31/12/1999)
--Temporary Variables To Hold the Values During Processing of Each Date of Year
DECLARE
@DayOfWeekInMonth INT,
@DayOfWeekInYear INT,
@DayOfQuarter INT,
@WeekOfMonth INT,
@CurrentYear INT,
@CurrentMonth INT,
@CurrentQuarter INT
/*Table Data type to store the day of week count for the month and year*/
DECLARE @DayOfWeek TABLE (DOW INT, MonthCount INT, QuarterCount INT, YearCount INT)
INSERT INTO @DayOfWeek VALUES (1, 0, 0, 0)
INSERT INTO @DayOfWeek VALUES (2, 0, 0, 0)
INSERT INTO @DayOfWeek VALUES (3, 0, 0, 0)
INSERT INTO @DayOfWeek VALUES (4, 0, 0, 0)
INSERT INTO @DayOfWeek VALUES (5, 0, 0, 0)
INSERT INTO @DayOfWeek VALUES (6, 0, 0, 0)
INSERT INTO @DayOfWeek VALUES (7, 0, 0, 0)
--Extract and assign various parts of Values from Current Date to Variable
DECLARE @CurrentDate AS DATETIME = @StartDate
SET @CurrentMonth = DATEPART(MM, @CurrentDate)
SET @CurrentYear = DATEPART(YY, @CurrentDate)
SET @CurrentQuarter = DATEPART(QQ, @CurrentDate)
/********************************************************************************************/
--Proceed only if Start Date(Current date ) is less than End date you specified above
WHILE @CurrentDate < @EndDate
BEGIN
/*Begin day of week logic*/
/*Check for Change in Month of the Current date if Month changed then
Change variable value*/
IF @CurrentMonth != DATEPART(MM, @CurrentDate)
BEGIN
UPDATE @DayOfWeek
SET MonthCount = 0
SET @CurrentMonth = DATEPART(MM, @CurrentDate)
END
/* Check for Change in Quarter of the Current date if Quarter changed then change
Variable value*/
IF @CurrentQuarter != DATEPART(QQ, @CurrentDate)
BEGIN
UPDATE @DayOfWeek
SET QuarterCount = 0
SET @CurrentQuarter = DATEPART(QQ, @CurrentDate)
END
/* Check for Change in Year of the Current date if Year changed then change
Variable value*/
IF @CurrentYear != DATEPART(YY, @CurrentDate)
BEGIN
UPDATE @DayOfWeek
SET YearCount = 0
SET @CurrentYear = DATEPART(YY, @CurrentDate)
END
-- Set values in table data type created above from variables
UPDATE @DayOfWeek
SET
MonthCount = MonthCount + 1,
QuarterCount = QuarterCount + 1,
YearCount = YearCount + 1
WHERE DOW = DATEPART(DW, @CurrentDate)
SELECT
@DayOfWeekInMonth = MonthCount,
@DayOfQuarter = QuarterCount,
@DayOfWeekInYear = YearCount
FROM @DayOfWeek
WHERE DOW = DATEPART(DW, @CurrentDate)
/*End day of week logic*/
/* Populate Your Dimension Table with values*/
INSERT INTO [dbo].[TimeDim]
SELECT
CONVERT (char(8),@CurrentDate,112) as timeCode,
@CurrentDate AS date,
CONVERT (char(10),@CurrentDate,103) as FullDateUK,
CONVERT (char(10),@CurrentDate,101) as FullDateUSA,
DATEPART(DD, @CurrentDate) AS dayOfMonth,
--Apply Suffix values like 1st, 2nd 3rd etc..
DATENAME(DW, @CurrentDate) AS dayName,
@DayOfQuarter AS dayOfQuarter,
DATEPART(DY, @CurrentDate) AS dayOfYear,
DATEPART(WW, @CurrentDate) + 1 - DATEPART(WW, CONVERT(VARCHAR,
DATEPART(MM, @CurrentDate)) + '/1/' + CONVERT(VARCHAR,
DATEPART(YY, @CurrentDate))) AS weekOfMonth,
(DATEDIFF(DD, DATEADD(QQ, DATEDIFF(QQ, 0, @CurrentDate), 0),
@CurrentDate) / 7) + 1 AS weekOfQuarter,
DATEPART(WW, @CurrentDate) AS weekOfYear,
DATEPART(MM, @CurrentDate) AS month,
DATENAME(MM, @CurrentDate) AS monthName,
DATEPART(QQ, @CurrentDate) AS Quarter,
DATEPART(YEAR, @CurrentDate) AS year
SET @CurrentDate = DATEADD(DD, 1, @CurrentDate)
END
The Error is so clear:- 错误非常明显:
Column name or number of supplied values does not match table definition.
列名或提供的值数与表定义不匹配。
That means you trying insert number of values doesn't match with number of columns. 这意味着您尝试插入的值数与列数不匹配。
The number of Columns is 13 , as next:- 列数为13 ,其次是:
The number of values is 36 , as following:- 值的数目是36 ,如下所示:
After Editing the script , the error still existing, because the number of values is 15 as following:- 编辑脚本后,错误仍然存在,因为值的数目为15 ,如下所示:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.