I have tried:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
But it gives this error message:
ALTER TABLE only allows columns to be added that can contain nulls or have a DEFAULT definition specified
I have tried:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
But it gives this error message:
ALTER TABLE only allows columns to be added that can contain nulls or have a DEFAULT definition specified
As an option you can initially create Null-able column, then update your table column with valid not null values and finally ALTER column to set NOT NULL constraint:
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
Another option is to specify correct default value for your column:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: Please note that answer above contains GO
which is a must when you run this code on Microsoft SQL server. If you want to perform the same operation on Oracle or MySQL you need to use semicolon ;
like that:
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
statement you mention would be detrimental in any query. It should be simple enough to see if you have an extra column in the update
statement here. You would generally be adding only a column or two at a time. If you happen to add an extra column into your update
statement that doesn't belong there, in this example, then maybe you shouldn't be in charge of data in the first place. –
Cubicle ALTER COLUMN
is NOT supported in SQLite. –
Suzan @NewColValue
, and you get no error... (It just happened here :P) –
Genevagenevan GO
before and it appears to be not a part of the SQL specification, thus it will probably lead to failure for scripts not being executed by one of the tools that support it. Just use semicolons? I don't recommend spreading Microsoft standards as they rarely care about any established and reasonable standard, but invent their own just to have their own invented. Apart from that, helpful answer. –
Scammon If you aren't allowing the column to be Null you need to provide a default to populate existing rows. e.g.
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
On Enterprise Edition this is a metadata only change since 2012
UPDATE
needs to UPDATE
all rows and then the altering to NOT NULL
also does (somewhat surprisingly) dba.stackexchange.com/questions/29522/… –
Rivkarivkah NULL
- albeit only temporarily. If you want to run an ALTER TABLE ADD column NOT NULL
and the table has rows you need to provide a default –
Rivkarivkah A faster solution
If you, like me, need to do this on a table with a large amount of data, the ADD-UPDATE-ALTER option is very slow (it can take hours for millions of rows).
If you also don't want a default value on your table, here's the full code for creating a column and dropping the default constraint (pretty much instant even for large tables):
ALTER TABLE my_table ADD column_name INT NOT NULL CONSTRAINT my_table_default_constraint DEFAULT 0
GO
ALTER TABLE my_table DROP CONSTRAINT my_table_default_constraint
GO
This is for SQL Server
The error message is quite descriptive, try:
ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
-
, or save „-0“ (so 0), or error. Maybe the answered just wanted to tell you to think of a sane default and put it there. –
Ongoing Other SQL implementations have similar restrictions. The reason is that adding a column requires adding values for that column (logically, even if not physically), which default to NULL
. If you don't allow NULL
, and don't have a default
, what is the value going to be?
Since SQL Server supports ADD CONSTRAINT
, I'd recommend Pavel's approach of creating a nullable column, and then adding a NOT NULL
constraint after you've filled it with non-NULL
values.
This worked for me, can also be "borrowed" from the design view, make changes -> right click -> generate change 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"
© 2022 - 2024 — McMap. All rights reserved.