我试图在SQL中创建一个表,但一直出现错误

我试图在SQL中创建一个表,但一直出现错误,sql,teradata,Sql,Teradata,我正在使用Teradata SQL assistant创建一个表。我使用的代码如下: 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) NO

我正在使用Teradata SQL assistant创建一个表。我使用的代码如下:

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 Database][3707]语法错误,应为介于“,”和“Month”关键字之间的“CHECK”关键字

有人知道问题出在哪里吗?

试试这个方法

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
)


尝试此操作,将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
);

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

,建议使用prackets[],因为错误表明
month
(以及
year
)是Teradata中的保留关键字,不能用作列名

您可以对其进行双引号引用(但在每个查询中也必须对其进行双引号引用),或者更改名称。还有一个问题,
主键
约束前缺少逗号:

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)
);

SQL Server(MSSQL)MySQL。。而且标签也完全错了。。正如错误提示的那样,由于RDMs标记已修复,我不知道TeraData
CREATE TABLE..
结构中的数据类型和/或索引。。但是缺少一个逗号。。在
年之后,VARCHAR(4)不为空
@DaleK,它可能是空的。我需要为那张唱片使用不同的名字吗?@DaleK它是被保留的。我确定了这个名字,它成功了。谢谢通过两个不同的查询?我试过了,我过去的代码没有错误是的,每次我运行它时,它都会说有相同的错误。看背面的标记,它看起来像是在mysql上运行的。这是SQL Server SQL方言代码SQL tag并不意味着这个网站上的SQL Server(MSSQL)。我只是使用了建议的标记。我的错。方括号中的关键字是SQL Server语法,标准SQL需要双引号(SQL Server也支持)@RaymondNijland:我在Teradata工作了20多年,相信我,语法是有效的。逻辑主键不同于物理主键索引“我使用Teradata已经20多年了,相信我,语法是有效的。”好吧,很公平,如果
创建表…
在手册中的两个不同位置“解释”了它也没有用。。。扩展得越广,确实也显示了这种结构。@RaymondNijland,您调用的语法是用于创建主索引的,它与主键不同。主键、约束等都在参数内。主索引在外面。主题:今天我们第二次再来。。。。无论如何,我已经注意到了主键和主索引之间的差异,就像我之前说过的,从未使用过TeraData,只是说
CREATE TABLE..
在两个手动位置上没有帮助,至少可以说是混淆了。。不管怎么说,最后一场拳击赛很容易解决<代码>。。之间而且。。。重复('z',255)我删除了问题链接,但我想暂时隐藏它。你是自己还是stackoverflow警察删除了链接中的最后一条评论?正如我在睡觉前注意到的,你发表了一条评论。。。但我仍然无法找到我在“最近删除的答案”列表中删除的问题,因此,如果您仍然可以轻松找到该链接并再次对其进行评论,那就太好了;-)
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)
);