Saya secara massal memperbarui database SQL Server. Saya mengubah semua numeric(38,0)
kolom kami menjadi int
(ya, skrip SQL Server dibuat dari skrip Oracle) . Menggunakan SMO dan C # (saya seorang insinyur sw) , saya berhasil membuat skrip yang sangat bagus seperti studio SQL Server Management . Semuanya bekerja dengan sangat baik kecuali untuk satu masalah tertentu:
untuk beberapa tabel, ketika saya menyebutnya ALTER TABLE [myTable] ALTER COLUMN [columnA] INT
memutuskan juga mengubah kolom dari NOT NULL to NULL
. Itu tentu saja merupakan masalah besar karena saya perlu membuat ulang kunci utama untuk sebagian besar tabel di kolom-kolom tertentu.
Jelas, saya memiliki banyak pilihan menggunakan SMO untuk mengetahui kolom mana yang merupakan kunci utama dan memaksa mereka untuk TIDAK NULL setelah atau saat saya memperbarui tipe data, tetapi saya benar-benar ingin tahu apa yang dapat menyebabkan ini.
sumber
Jawaban:
Itu tergantung pada pengaturan SET ANSI_NULL_DFLT_OFF atau SET ANSI_NULL_DFLT_ON (baca ini untuk efek lain juga dari SET ANSI_DEFAULTS).
Secara pribadi, saya telah menentukan batasan ini secara eksplisit jika saya ingin kolom nol atau non nol daripada mengandalkan pengaturan lingkungan.
Anda bisa mengeluarkan perintah ini lagi dan jika kolom sudah pada nullability yang diinginkan perintah diabaikan.
Namun, Anda juga mengatakan bahwa Anda hanya perlu mengubahnya di mana itu merupakan bagian dari kunci utama. Seharusnya tidak ada kaitannya pada apakah suatu kolom dapat dibatalkan atau tidak dari tahap pemodelan / implementasi
sumber
SET ANSI_NULL_DFLT_ON
tidak berlaku di sini. Default ANSI_NULL selalu aktif untuk ALTER COLUMN; jika tidak ditentukan, kolom tersebut dapat dibatalkan.