Saya telah mencoba:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Tapi itu memberikan pesan kesalahan ini:
ALTER TABLE hanya mengizinkan kolom yang akan ditambahkan yang dapat berisi null atau memiliki definisi DEFAULT yang ditentukan
Saya telah mencoba:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Tapi itu memberikan pesan kesalahan ini:
ALTER TABLE hanya mengizinkan kolom yang akan ditambahkan yang dapat berisi null atau memiliki definisi DEFAULT yang ditentukan
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 dalamupdate
pernyataan di sini. Anda biasanya hanya akan menambahkan satu atau dua kolom pada satu waktu. Jika Anda kebetulan menambahkan kolom tambahan ke dalamupdate
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
Pada Edisi Perusahaan, ini hanya metadata yang berubah sejak 2012
sumber
Pesan kesalahan cukup deskriptif, coba:
sumber
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 mengizinkanNULL
, dan tidak memilikidefault
, berapa nilainya?Karena SQL Server mendukung
ADD CONSTRAINT
, saya akan merekomendasikan pendekatan Pavel untuk membuat kolom nullable, dan kemudian menambahkanNOT NULL
batasan setelah Anda mengisinya dengan non-NULL
nilai.sumber
Ini berhasil untuk saya, juga bisa "dipinjam" dari tampilan desain, buat perubahan -> klik kanan -> buat skrip ubah.
sumber
sumber
sumber