Я пытаюсь создать таблицу в SQL и постоянно получаю сообщение об ошибке - PullRequest
0 голосов
/ 08 ноября 2019

Я использую 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] [3707] Синтаксическая ошибка, ожидаетсячто-то вроде ключевого слова «CHECK» между «,» и ключевым словом «Месяц».

Кто-нибудь знает, в чем проблема?

Ответы [ 3 ]

3 голосов
/ 08 ноября 2019

Поскольку ошибка подразумевает, что monthyear тоже) является зарезервированным ключевым словом в 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)
);
0 голосов
/ 08 ноября 2019

Попробуйте, чтобы иметь таблицу с 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 с идентификатором [auto counter]

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

-Обратите внимание, что рекомендуется использовать prackets [], если имя столбца является зарезервированным ключевым словом, например [year]

0 голосов
/ 08 ноября 2019

Попробуйте вот так

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
)

и

ALTER TABLE `calendar` ADD PRIMARY KEY (`CalendarKey`);
...