Синтаксис столбца Alter table добавить в SQL

Я пытаюсь изменить таблицу с именем company, но будет отображаться ошибка

syntax error at or near "("
LINE 2: ADD( company_access_level short NOT NULL,

Мой синтаксис

ALTER TABLE company
ADD company_access_level short NOT NULL,
workgroup_level short NOT NULL,
Company Logon URL character varying NOT NULL,
Company Logoff URL character varying NOT NULL

Спасибо

4 ответа

Я просто попробовал этот фиксированный синтаксис в postgressql, и он сработал. Нет типа short, хотя вам придется использовать что-то еще (возможно smallint?) Если ваша таблица содержит данные, это script потерпит неудачу по причинам, изложенным в ответе Джона.

ALTER TABLE company
ADD company_access_level int NOT NULL,
ADD workgroup_level int NOT NULL,
ADD "Company Logon URL" character varying NOT NULL,
ADD "Company Logoff URL" character varying NOT NULL


Кроме того, если в вашей таблице есть данные, то вы не можете добавить NOT NULL столбцы (и для некоторых РСУБД вы не можете добавить NOT NULL столбцы, даже если в таблице нет данных).

Либо укажите значение по умолчанию, либо разрешите столбцу NULLable. Вы всегда можете заполнить новые столбцы данными и впоследствии изменить столбцы NOT NOT.


Извините за открытие такого старого вопроса, но совет в одном из ответов, который вы не могли добавить NOT NULL, стоил мне немного неприятностей. Вы можете добавить столбец NOT NULL в таблицу с данными, единственным ограничением является то, что вы также должны указать значение по умолчанию. Протестировано с Sybase, Postgres и MySQL. Итак, пример выше:

ALTER TABLE company
 ADD company_access_level int default 'not set' NOT NULL ,
 ADD workgroup_level int default 0 NOT NULL,
 ADD "Company Logon URL" character varying default 'not set' NOT NULL,
 ADD "Company Logoff URL" character varying default 'not set' NOT NULL


Как кто-то, кто пришел сюда с тем же вопросом, я не уверен, что делать с этими ответами. Я попробовал их все и всегда получал синтаксическую ошибку "рядом" с тем или иным термином. Вернувшись к официальному docs, я понял, что отсутствовало дополнительное ключевое слово, например SET или TYPE. Примеры:

Сначала это

zuri=# ALTER TABLE newarts ALTER COLUMN sunsetdate DATE NULL; ERROR: syntax error at or near "DATE" LINE 2: ALTER COLUMN sunsetdate DATE NULL;

Затем это:

zuri=# ALTER TABLE newarts ALTER COLUMN sunsetdate TYPE DATE NULL; ERROR: syntax error at or near "NULL" LINE 2: ALTER COLUMN sunsetdate TYPE DATE NULL;

Да, там все еще есть ошибка, но как только я указал значение DATE с ключевым словом TYPE, ошибка была решена, и я перешел к другому. У меня был такой же опыт с добавлением SET (см. Примеры на той же странице официальных документов, которые я уже цитировал).

Что касается конкретной проблемы NOT NULL (особенно в отношении моей даты дат), я прочитал этот ответ, и это казалось для работы - я не получил сообщение об ошибке -

zuri=# update lili_code set sunsetdate=NULL; UPDATE 0

Но затем я прочитал

При успешном завершении команда UPDATE возвращает тег команды формы

UPDATE count

Число - это количество обновленных строк. Если count равен 0, строк нет (это не считается ошибкой).

Что также находится в официальных документах, здесь.

Наконец, я обратился к PGAdminIII, где обнаружил, что NOT NULL - это простой флажок. Снимите флажок, проблема решена. Я уверен, что есть способ сделать эту работу в командной строке с psql, я просто ее не нашел.

Я думаю, что некоторые из вариантов также могут быть связаны с различиями между ALTER и UPDATE (см. этот SO ответ и мой дерзкий комментарий), а также между добавлением новых структур (как в вопросе ОП) и изменения данных, которые уже существуют (как у меня). Мораль истории, прочитайте официальную документацию. Не отсканируйте его. Прочтите. И если вы хотите узнать больше о NULL и NOT NULL, прочитайте this.

licensed under cc by-sa 3.0 with attribution.