Ответы:
Как вариант, вы можете сначала создать столбец с нулевым значением, затем обновить столбец таблицы действительными ненулевыми значениями и, наконец, 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, поскольку они редко заботятся о каком-либо установленном и разумном стандарте, а изобретают свои собственные, просто чтобы изобрести свои собственные. Кроме того, полезный ответ.
Если вы не разрешаете столбцу быть пустым, вам необходимо указать значение по умолчанию для заполнения существующих строк. например
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
В Enterprise Edition это изменение только метаданных с 2012 года.
Другие реализации SQL имеют аналогичные ограничения. Причина в том, что добавление столбца требует добавления значений для этого столбца (логически, даже если не физически), что по умолчанию NULL
. Если вы не разрешаете NULL
и у вас нетdefault
, какова будет ценность?
Поскольку SQL Server поддерживает ADD CONSTRAINT
, я бы порекомендовал Павла создать столбец, допускающий значение NULL, а затем добавить NOT NULL
ограничение после того, как вы заполнили его NULL
значениями, отличными от значений.
Это сработало для меня, также можно «позаимствовать» из представления дизайна, внести изменения -> щелкнуть правой кнопкой мыши -> создать сценарий изменения.
BEGIN TRANSACTION
GO
ALTER TABLE dbo.YOURTABLE ADD
YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0
GO
COMMIT
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"