Risposte:
Come opzione puoi inizialmente creare una colonna Null-grado, quindi aggiornare la colonna della tabella con valori non nulli validi e infine la colonna ALTER per impostare il vincolo 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
Un'altra opzione è specificare il valore predefinito corretto per la colonna:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: Tieni presente che la risposta sopra contiene GO
che è un must quando esegui questo codice su Microsoft SQL Server. Se vuoi eseguire la stessa operazione su Oracle o MySQL devi usare il punto ;
e virgola in questo modo:
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
affermazione pericolosa di cui parli sarebbe dannosa in qualsiasi domanda. Dovrebbe essere abbastanza semplice vedere se hai una colonna in più nella update
dichiarazione qui. In genere aggiungeresti solo una o due colonne alla volta. Se ti capita di aggiungere una colonna in più nella tua update
dichiarazione che non appartiene a lì, in questo esempio, forse non dovresti essere responsabile dei dati in primo luogo.
ALTER COLUMN
NON è supportato in SQLite.
GO
prima e sembra non essere una parte della specifica SQL , quindi probabilmente porterà a un errore per gli script che non vengono eseguiti da uno degli strumenti che lo supportano. Usa solo il punto e virgola? Non consiglio di diffondere gli standard Microsoft in quanto raramente si preoccupano di uno standard stabilito e ragionevole, ma se ne inventano uno proprio per averne inventato uno proprio. A parte questo, risposta utile.
Se non si consente alla colonna di essere Null, è necessario fornire un valore predefinito per popolare le righe esistenti. per esempio
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
Su Enterprise Edition si tratta di una modifica solo ai metadati dal 2012
Altre implementazioni SQL hanno limitazioni simili. Il motivo è che l'aggiunta di una colonna richiede l'aggiunta di valori per quella colonna (logicamente, anche se non fisicamente), che per impostazione predefinita sono NULL
. Se non lo permetti NULL
e non hai un default
, quale sarà il valore?
Poiché SQL Server supporta ADD CONSTRAINT
, consiglierei l'approccio di Pavel di creare una colonna nullable e quindi aggiungere un NOT NULL
vincolo dopo averlo riempito con NULL
valori non validi.
Questo ha funzionato per me, può anche essere "preso in prestito" dalla vista progettazione, apportare modifiche -> fare clic con il tasto destro -> generare script di modifica.
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"