Jawaban:
Sebagai opsi, Anda awalnya dapat membuat kolom Null -able, kemudian memperbarui kolom tabel Anda dengan nilai yang valid bukan null dan terakhir kolom ALTER untuk menyetel batasan 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
Opsi lainnya adalah menentukan nilai default yang benar untuk kolom Anda:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: Harap dicatat bahwa jawaban di atas berisi GO
yang menjadi keharusan ketika Anda menjalankan kode ini di server Microsoft SQL. Jika Anda ingin melakukan operasi yang sama di Oracle atau MySQL, Anda perlu menggunakan titik koma ;
seperti itu:
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
Pernyataan berbahaya yang Anda sebutkan akan merugikan kueri apa pun. Ini harus cukup sederhana untuk melihat apakah Anda memiliki kolom tambahan dalam update
pernyataan di sini. Anda biasanya hanya akan menambahkan satu atau dua kolom pada satu waktu. Jika Anda kebetulan menambahkan kolom tambahan ke dalam update
pernyataan Anda yang tidak termasuk di sana, dalam contoh ini, mungkin Anda tidak seharusnya bertanggung jawab atas data sejak awal.
ALTER COLUMN
TIDAK didukung di SQLite.
GO
sebelumnya dan tampaknya bukan bagian dari spesifikasi SQL , sehingga mungkin akan menyebabkan kegagalan skrip yang tidak dijalankan oleh salah satu alat yang mendukungnya. Cukup gunakan titik koma? Saya tidak merekomendasikan menyebarkan standar Microsoft karena mereka jarang peduli dengan standar yang mapan dan masuk akal, tetapi menciptakan standar mereka sendiri hanya untuk menemukan sendiri. Selain itu, jawaban yang membantu.
Jika Anda tidak mengizinkan kolom menjadi Null, Anda perlu memberikan default untuk mengisi baris yang ada. misalnya
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
Pada Edisi Perusahaan, ini hanya metadata yang berubah sejak 2012
Implementasi SQL lainnya memiliki batasan serupa. Alasannya adalah bahwa menambahkan kolom memerlukan penambahan nilai untuk kolom tersebut (secara logis, meskipun tidak secara fisik), yang defaultnya NULL
. Jika Anda tidak mengizinkan NULL
, dan tidak memiliki default
, berapa nilainya?
Karena SQL Server mendukung ADD CONSTRAINT
, saya akan merekomendasikan pendekatan Pavel untuk membuat kolom nullable, dan kemudian menambahkan NOT NULL
batasan setelah Anda mengisinya dengan non- NULL
nilai.
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"