[英]SQL can't insert data for time dimension table
我正在为学校项目建立一个数据仓库。 我已经创建了时间维度表,并且可以使用。
` 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));`
但是,当我尝试在时间维度表中创建数据时会发生错误。错误显示:**
`Msg 213, Level 16, State 1, Line 95
Column name or number of supplied values does not match table definition.`
**我创建数据的代码是
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
错误非常明显:
列名或提供的值数与表定义不匹配。
这意味着您尝试插入的值数与列数不匹配。
列数为13 ,其次是:
值的数目是36 ,如下所示:
编辑脚本后,错误仍然存在,因为值的数目为15 ,如下所示:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.