Mengubah lebar kolom


39

Akankah menambah lebar kolom (nvarchar) akan menjatuhkan tabel?

Dengan kata lain, dapatkah lebar diubah di lingkungan produksi dengan pengguna aktif?

Saya pikir jika ukurannya meningkat (tidak seperti menurun) ini tidak akan menjadi masalah.

Jawaban:


52

Jika Anda melakukannya melalui pernyataan T-SQL seperti di bawah ini, maka tidak akan terjadi penurunan tabel dan Anda dapat melakukannya dengan aman di lingkungan produksi:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Jika Anda melakukannya melalui GUI Tabel Desain SSMS, itu akan tergantung pada skrip apa yang diputuskan untuk digunakan untuk mengimplementasikan perubahan. Kadang-kadang itu akan memasukkan data ke tabel sementara, jatuhkan tabel asli, buat versi baru dari tabel itu, dan masukkan kembali ke yang baru. Cara mudah untuk mengetahui apa yang akan dilakukan adalah dengan mengklik tombol "Hasilkan Script" dan lihat T-SQL yang akan dieksekusi.


1
Saya pikir bahkan tombol "Hasilkan Script" melempar peringatan bahwa Anda akan menjatuhkan meja sebelum bahkan menunjukkan skrip.
Nick Chammas

1
Memang memunculkan kesalahan, tetapi sebenarnya tidak menjalankan skrip sampai Anda mengklik OK (atau menjalankan atau apa pun) pada jendela dengan skrip. Anda dapat menyalin skrip dan membatalkan jendela yang menunjukkan skrip tersebut kepada Anda.
mrdenny

tetapi apakah itu berhasil mengatakan perubahan dari float ke Desimal (n, n)?
Nishanth Shaan

Apa efeknya jika tabel direplikasi? Saya berasumsi tabel pelanggan tidak akan diperbarui secara otomatis?
tmwoods

18

Menambah lebar kolom dari sebuah nvarcharkolom tidak akan memerlukan penurunan tabel. Tidak akan ada ALTER TABLEoperasi. Untuk detail tentang batasan saat mengubah properti tabel atau kolom Anda dapat membaca pada pernyataan ALTER TABLE .

Saya menyalin bagian yang paling relevan dari dokumentasi di bawah ini:

Mengubah Ukuran Kolom

Anda bisa mengubah panjang, presisi, atau skala kolom dengan menentukan ukuran baru untuk tipe data kolom dalam klausa ALTER COLUMN. Jika data ada di kolom, ukuran baru tidak boleh lebih kecil dari ukuran maksimum data. Selain itu, kolom tidak dapat didefinisikan dalam indeks, kecuali jika kolom tersebut adalah tipe data varchar, nvarchar, atau varbinary dan indeks bukan merupakan hasil dari kendala PRIMARY KEY. Lihat contoh P.

Kunci dan ALTER TABEL

Perubahan yang ditentukan dalam ALTER TABLE diimplementasikan segera. Jika perubahan memerlukan modifikasi pada baris dalam tabel, ALTER TABLE memperbarui baris. ALTER TABLE mendapatkan kunci skema modifikasi di atas meja untuk memastikan bahwa tidak ada koneksi lain referensi bahkan metadata untuk tabel selama perubahan, kecuali operasi indeks online yang membutuhkan kunci SCH-M sangat pendek di akhir. Dalam operasi ALTER TABLE… SWITCH, kunci diperoleh pada tabel sumber dan target. Modifikasi yang dilakukan pada tabel dicatat dan sepenuhnya dapat dipulihkan. Perubahan yang memengaruhi semua baris dalam tabel yang sangat besar, seperti menjatuhkan kolom atau menambahkan kolom NOT NULL dengan default, dapat memakan waktu lama untuk menyelesaikan dan menghasilkan banyak catatan log. Pernyataan ALTER TABLE ini harus dieksekusi dengan hati-hati sama seperti INSERT, UPDATE,


Juga jawaban yang bagus. Tapi saya hanya bisa memilih satu. Terima kasih!
Fernando
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.