Я пробовал:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Но это сообщение об ошибке:
ALTER TABLE позволяет добавлять столбцы, которые могут содержать нули или задано определение DEFAULT
Я пробовал:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Но это сообщение об ошибке:
ALTER TABLE позволяет добавлять столбцы, которые могут содержать нули или задано определение DEFAULT
В качестве опции вы можете сначала создать столбец 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;
Если вы не разрешаете столбцу Null, вам нужно указать значение по умолчанию для заполнения существующих строк. например.
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
и не имеете default
, каково будет значение?
Так как SQL Server поддерживает ADD CONSTRAINT
, я бы рекомендовал Pavel создать столбцы с нулевым значением, а затем добавить ограничение NOT NULL
после того, как вы заполнили его значениями <NULL
.
Это сработало для меня, также можно "заимствовать" из проектного представления, внести изменения → щелкнуть правой кнопкой мыши → сгенерировать изменение script.
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"