- Memahami Keterbatasan Data pada Kolom NOT NULL
- Membatalkan Penghapusan Data Kolom yang Ada
- Mengubah Struktur Data Kolom
- Verifikasi Nullability yang Diubah
Mengubah struktur data kolom di SQL Server dari NULL ke NOT NULL , dengan demikian melarang nilai non-null di kolom itu, umumnya dilakukan menggunakan ALTER TABLE yang relatif sederhana sintaks untuk mengubah kolom yang dimaksud dengan tepat.
Dalam tutorial ini kita akan memeriksa tindakan pencegahan keamanan penting yang diperlukan saat mengubah yang sudah ada data dalam kolom, sebelum benar-benar mengeluarkan ALTER perintah yang berpotensi menyebabkan kerusakan pada tabel itu sendiri.
Memahami Batasan Data di Kolom NOT NULL
Sebelum perubahan dilakukan pada tabel Anda, penting untuk membahas secara singkat data apa yang dapat (dan tidak dapat) ditentukan dalam kolom yang ada yang ingin Anda ubah menjadi NOT NULL , memastikan bahwa tidak ada baris yang diizinkan memiliki NULL nilai di kolom itu.
Yang paling penting, semua NULL yang ada nilai dalam kolom harus diperbarui ke nilai bukan nol sebelum ALTER perintah dapat berhasil digunakan dan kolom dibuat NOT NULL . Setiap upaya untuk menyetel kolom ke NOT NULL sementara sebenarnya NULL data tetap di kolom akan menghasilkan kesalahan dan tidak akan terjadi perubahan.
Membatalkan Penghapusan Data Kolom yang Ada
Untuk memastikan tidak ada NULL nilai di kolom kami, kami akan menggunakan UPDATE dasar perintah, berlaku secara eksplisit untuk baris di mana nilainya saat ini NULL . Misalnya, kami memiliki tabel dasar client data dengan name , email , dan phone . Saat ini beberapa catatan memiliki NULL phone nilai, yang tidak ingin kami izinkan:
clientsID name email phone
1 Neville Estes Quisque@diamProin.com 1-843-863-2697
2 Flynn Fry velit@senectus.net
3 Wyatt Schmidt nibh.dolor@sit.co.uk 1-950-895-1847
4 Oleg Hill lacinia.vitae.sodales@acrisusMorbi.edu 1-173-344-1578
5 Randall Bullock eu@lacus.net
6 Lamar White ut.sem@risus.com 1-421-757-4907
7 Fuller Hill Vivamus.nisi@tempor.ca 1-178-437-8281
8 Ulysses Boyle sem.mollis.dui@Integeraliquamadipiscing.net 1-535-515-1494
9 Paki Palmer nec@euismod.org
10 Kamal Buchanan sapien.gravida@tellusnonmagna.co.uk 1-325-847-4838
Oleh karena itu, kita dapat memasukkan nilai default untuk semua phone nilai yang saat ini NULL dengan pernyataan berikut:
UPDATE
clients
SET
phone = '0-000-000-0000'
WHERE
phone IS NULL;
Sekarang NULL . kami semua nilai telah diganti dengan nilai yang kami anggap sebagai default , 0-000-000-0000 :
clientsID name email phone
1 Neville Estes Quisque@diamProin.com 1-843-863-2697
2 Flynn Fry velit@senectus.net 0-000-000-0000
3 Wyatt Schmidt nibh.dolor@sit.co.uk 1-950-895-1847
4 Oleg Hill lacinia.vitae.sodales@acrisusMorbi.edu 1-173-344-1578
5 Randall Bullock eu@lacus.net 0-000-000-0000
6 Lamar White ut.sem@risus.com 1-421-757-4907
7 Fuller Hill Vivamus.nisi@tempor.ca 1-178-437-8281
8 Ulysses Boyle sem.mollis.dui@Integeraliquamadipiscing.net 1-535-515-1494
9 Paki Palmer nec@euismod.org 0-000-000-0000
10 Kamal Buchanan sapien.gravida@tellusnonmagna.co.uk 1-325-847-4838
Mengubah Struktur Data Kolom
Sekarang tidak ada NULL nilai lagi, kami dapat mengeluarkan ALTER pernyataan untuk memperbarui kolom sehingga semua penambahan di masa mendatang tidak mengizinkan NULL nilai-nilai. Karena kami mengubah phone kolom dalam contoh ini, pernyataan akan terlihat seperti ini:
ALTER TABLE
clients
ALTER COLUMN
phone
NVARCHAR(20) NOT NULL;
Verifikasi Nullability yang Diubah
Setelah perubahan pada kolom Anda dibuat, praktik yang baik adalah memverifikasi bahwa kolom tidak lagi mengizinkan NULL nilai dengan menjalankan INSERT simple sederhana menguji dan mencoba memasukkan catatan baru dengan NULL nilai di kolom yang diubah:
INSERT INTO
clients(name, email, phone)
VALUES
('John Doe', 'jdoe@domain.com', NULL);
Jika semua berjalan sesuai rencana, SQL Server akan mengeluarkan kesalahan yang menyatakan bahwa kolom tidak mengizinkan NULL nilai:
Cannot insert the value NULL into column 'phone', table 'library.dbo.clients'; column does not allow nulls. INSERT fails. [SQL State=23000, DB Errorcode=515]