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

Я пытался:

ALTER TABLE MY_TABLE 
ADD STAGE INT NOT NULL;

Но выдает это сообщение об ошибке:

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

108
задан Ryan Kohn 4 January 2013 в 16:55
поделиться

5 ответов

Как вариант, вы можете сначала создать столбец, допускающий значение 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;
200
ответ дан 24 November 2019 в 03:30
поделиться
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
1
ответ дан 24 November 2019 в 03:30
поделиться

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

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

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

12
ответ дан 24 November 2019 в 03:30
поделиться

Сообщение об ошибке достаточно информативное, попробуйте:

ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
6
ответ дан 24 November 2019 в 03:30
поделиться

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

Поскольку SQL Server поддерживает ADD CONSTRAINT ], Я бы порекомендовал Павла создать столбец, допускающий значение NULL, а затем добавить ограничение NOT NULL после того, как вы заполнили его значениями, отличными от NULL .

3
ответ дан 24 November 2019 в 03:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: