Изменить таблицу добавить синтаксис столбца в SQL - PullRequest
7 голосов
/ 10 августа 2010

Я пытаюсь изменить таблицу с именем 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 ]

21 голосов
/ 10 августа 2010

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

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
3 голосов
/ 10 августа 2010

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

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

0 голосов
/ 05 февраля 2016

Как человек, который пришел сюда с тем же вопросом, я не уверен, что делать с этими ответами. Я перепробовал их все и всегда получал синтаксическую ошибку «рядом» с тем или иным термином. Вернувшись к официальным документам , я понял, что не хватает дополнительного ключевого слова, такого как 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

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

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

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

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

0 голосов
/ 22 марта 2015

Извините за открытие такого старого вопроса, но совет в одном из ответов, что вы не можете добавить 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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...