Відповіді:
Як варіант, ви можете спочатку створити стовпець, що працює з нулем, а потім оновити стовпчик таблиці з дійсними ненульовими значеннями та, нарешті, стовпець ALTER, щоб встановити НЕ 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, оскільки вони рідко дбають про будь-який встановлений і розумний стандарт, але придумують свій власний, щоб мати свій власний винахід. Крім цього, корисна відповідь.
Якщо ви не дозволяєте стовпцю бути Null, вам потрібно вказати за замовчуванням для заповнення існуючих рядків. напр
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
, я б рекомендував підхід Павла створити нульовий стовпчик, а потім додати NOT NULL
обмеження після того, як ви заповнили його незначними NULL
значеннями.
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"