Я пытался:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Но это сообщение об ошибке:
ALTER TABLE позволяет добавлять только столбцы, которые могут содержать нули или иметь определение DEFAULT.
Я пытался:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Но это сообщение об ошибке:
ALTER TABLE позволяет добавлять только столбцы, которые могут содержать нули или иметь определение DEFAULT.
Как вариант, вы можете сначала создать столбец с нулевым значением, затем обновить столбец таблицы действительными ненулевыми значениями и, наконец, ALTER column, чтобы установить ограничение NOT NULL:
ALTER TABLE MY_TABLE ADD STAGE INT NULL
GO
UPDATE MY_TABLE SET <a valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL
GO
Другой вариант - указать правильное значение по умолчанию для вашего столбца:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: обратите внимание, что ответ выше содержит то, GO
что необходимо при запуске этого кода на сервере Microsoft SQL. Если вы хотите выполнить ту же операцию в Oracle или MySQL, вам нужно использовать точку с запятой ;
следующим образом:
ALTER TABLE MY_TABLE ADD STAGE INT NULL;
UPDATE MY_TABLE SET <a valid not null values for your column>;
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL;
update
вами опасное заявление может нанести ущерб любому запросу. Это должно быть достаточно просто, чтобы увидеть, есть ли у вас дополнительный столбец вupdate
заявлении здесь. Обычно вы добавляете только один или два столбца за раз. Если вы случайно добавили в свойupdate
оператор дополнительный столбец, который ему не нужен, в этом примере, возможно, вам вообще не следует отвечать за данные.ALTER COLUMN
он НЕ поддерживается в SQLite.GO
и похоже, что он не является частью спецификации SQL , поэтому он, вероятно, приведет к сбою для скриптов, не выполняемых одним из инструментов, которые его поддерживают. Просто используйте точку с запятой? Я не рекомендую распространять стандарты Microsoft, поскольку они редко заботятся о каком-либо установленном и разумном стандарте, а изобретают свои собственные, просто чтобы изобрести свои собственные. Кроме того, полезный ответ.Если вы не разрешаете столбцу быть пустым, вам необходимо указать значение по умолчанию для заполнения существующих строк. например
В Enterprise Edition это изменение только метаданных с 2012 года.
источник
Сообщение об ошибке довольно информативное, попробуйте:
источник
Другие реализации SQL имеют аналогичные ограничения. Причина в том, что добавление столбца требует добавления значений для этого столбца (логически, даже если не физически), что по умолчанию
NULL
. Если вы не разрешаетеNULL
и у вас нетdefault
, какова будет ценность?Поскольку SQL Server поддерживает
ADD CONSTRAINT
, я бы порекомендовал Павла создать столбец, допускающий значение NULL, а затем добавитьNOT NULL
ограничение после того, как вы заполнили егоNULL
значениями, отличными от значений.источник
Это сработало для меня, также можно «позаимствовать» из представления дизайна, внести изменения -> щелкнуть правой кнопкой мыши -> создать сценарий изменения.
источник
источник
источник