Вставьте столбец NOT NULL в существующую таблицу

Я пробовал:

ALTER TABLE MY_TABLE 
ADD STAGE INT NOT NULL;

Но это сообщение об ошибке:

ALTER TABLE позволяет добавлять столбцы, которые могут содержать нули или задано определение DEFAULT

Ответ 1

В качестве опции вы можете сначала создать столбец Null-able, а затем обновить столбец таблицы с допустимыми значениями не 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;

Ответ 2

Если вы не разрешаете столбцу Null, вам нужно указать значение по умолчанию для заполнения существующих строк. например.

ALTER TABLE dbo.YourTbl ADD
    newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0

В Enterprise Edition это изменение метаданных с 2012 года

Ответ 3

Сообщение об ошибке довольно наглядное, попробуйте:

ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';

Ответ 4

Другие реализации SQL имеют схожие ограничения. Причина в том, что добавление столбца требует добавления значений для этого столбца (логически, даже если это не физически), по умолчанию для NULL. Если вы не разрешаете NULL и не имеете default, каково будет значение?

Так как SQL Server поддерживает ADD CONSTRAINT, я бы рекомендовал Pavel создать столбцы с нулевым значением, а затем добавить ограничение NOT NULL после того, как вы заполнили его значениями <NULL.

Ответ 5

Это сработало для меня, также можно "заимствовать" из проектного представления, внести изменения → щелкнуть правой кнопкой мыши → сгенерировать изменение script.

BEGIN TRANSACTION
GO
ALTER TABLE dbo.YOURTABLE ADD
    YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0
GO
COMMIT

Ответ 6

ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;

Ответ 7

Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"