我正在尝试在SQL中创建表并不断出现错误

时间:2019-11-07 21:08:00

标签: sql teradata

我正在使用Teradata SQL助手来创建表。我使用的代码如下:

CREATE TABLE calendar
( 
     CalendarKey INT NOT NULL,
     FullDate DATE NOT NULL,
     DayOfWeek VARCHAR(20) NOT NULL,
     DayOfMonth INT NOT NULL,
     Month VARCHAR(20) NOT NULL,
     Qtr VARCHAR(2) NOT NULL,
     Year VARCHAR(4) NOT NULL

     PRIMARY KEY (CalendarKey)
);

当我尝试执行命令时收到此错误:

  

[Teradata数据库] [3707]语法错误,预期类似于在','和'Month'关键字之间的'CHECK'关键字。

有人知道这个问题是什么吗?

3 个答案:

答案 0 :(得分:3)

正如错误所暗示的那样,month(和year也是Teradata中的保留关键字,不能用作列名。

您可以将其双引号(但随后在每个查询中也必须双引号)或更改名称。还有一个问题,primary key约束前缺少逗号:

CREATE TABLE calendar
( 
     CalendarKey INT NOT NULL,
     FullDate DATE NOT NULL,
     DayOfWeek VARCHAR(20) NOT NULL,
     DayOfMonth INT NOT NULL,
     "Month" VARCHAR(20) NOT NULL,
     Qtr VARCHAR(2) NOT NULL,
     "Year" VARCHAR(4) NOT NULL,

     PRIMARY KEY (CalendarKey)
);

答案 1 :(得分:-1)

尝试这种方式

#include <bits/stdc++.h>

CREATE TABLE calendar (
  CalendarKey INT NOT NULL,
  FullDate DATE NOT NULL,
  DayOfWeek VARCHAR(20) NOT NULL,
  DayOfMonth INT NOT NULL,
  Month VARCHAR(20) NOT NULL,
  Qtr VARCHAR(2) NOT NULL,
  Year VARCHAR(4) NOT NULL
)

答案 2 :(得分:-2)

尝试此操作,以将带有PK的表作为表定义的一部分

CREATE TABLE calendar
( 
     CalendarKey INT PRIMARY KEY NOT NULL,
     FullDate DATE NOT NULL,
     [DayOfWeek] VARCHAR(20) NOT NULL,
     [DayOfMonth] INT NOT NULL,
     [Month] VARCHAR(20) NOT NULL,
     Qtr VARCHAR(2) NOT NULL,
     [Year] VARCHAR(4) NOT NULL
); 

或者具有主键PK和标识[自动计数器]

CREATE TABLE calendar
( 
     CalendarKey INT PRIMARY KEY Identity(1,1) NOT NULL,
     FullDate DATE NOT NULL,
     [DayOfWeek] VARCHAR(20) NOT NULL,
     [DayOfMonth] INT NOT NULL,
     [Month] VARCHAR(20) NOT NULL,
     Qtr VARCHAR(2) NOT NULL,
     [Year] VARCHAR(4) NOT NULL
);

-注意,如果col名称是保留关键字(例如[year]

),建议使用prackets []