Я пытался:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Но выдает это сообщение об ошибке:
ALTER TABLE only позволяет добавлять столбцы, которые могут содержать нули или задано определение DEFAULT
Как вариант, вы можете сначала создать столбец, допускающий значение NULL, затем обновить столбец таблицы действительными ненулевыми значениями и, наконец, ALTER столбец, чтобы установить ограничение 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;
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Если вы не разрешаете столбцу быть пустым, вам необходимо указать значение по умолчанию для заполнения существующих строк. например
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
В Enterprise Edition это изменение только метаданных с 2012 года
Сообщение об ошибке достаточно информативное, попробуйте:
ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
Другие реализации SQL имеют аналогичные ограничения. Причина в том, что добавление столбца требует добавления значений для этого столбца (логически, даже если не физически), которые по умолчанию имеют значение NULL
. Если вы не разрешаете NULL
и не имеете значения по умолчанию
, какое будет значение?
Поскольку SQL Server поддерживает ADD CONSTRAINT
], Я бы порекомендовал Павла создать столбец, допускающий значение NULL, а затем добавить ограничение NOT NULL
после того, как вы заполнили его значениями, отличными от NULL
.