Saya menggunakan SQL Server 2008 dan saya perlu membuat bidang VARCHAR lebih besar, dari (200 hingga 1200) di atas meja dengan sekitar 500 ribu baris. Yang perlu saya ketahui adalah jika ada masalah yang belum saya pertimbangkan.
Saya akan menggunakan pernyataan TSQL ini:
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
Saya sudah mencobanya pada salinan data dan pernyataan ini tidak memiliki efek buruk yang dapat saya lihat.
Jadi, apakah ada kemungkinan masalah dari melakukan ini yang mungkin belum saya pertimbangkan?
Omong-omong, kolom tersebut tidak diindeks.
sql-server
sql-server-2008
varchar
alter-column
Paul T Davies
sumber
sumber
Jawaban:
Ini hanya perubahan metadata: cepat.
Pengamatan: tentukan NULL atau NOT NULL secara eksplisit untuk menghindari "kecelakaan" jika salah satu pengaturan SET ANSI_xx berbeda misalnya dijalankan di osql bukan SSMS karena beberapa alasan
sumber
varchar(200)
kevarchar(max)
?Hanya ingin menambahkan 2 sen saya, karena saya mencari pertanyaan ini di Google b / c saya menemukan diri saya dalam situasi yang sama ...
WASPADALAH bahwa meskipun mengubah dari
varchar(xxx)
menjadivarchar(yyy)
memang merupakan perubahan meta-data, tetapi berubah menjadivarchar(max)
tidak. Karenavarchar(max)
nilai (alias nilai BLOB - gambar / teks dll) disimpan secara berbeda pada disk, tidak dalam baris tabel, tetapi "di luar baris". Jadi server akan menjadi gila di atas meja besar dan menjadi tidak responsif selama beberapa menit (jam).--no downtime ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200) --huge downtime ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)
PS. yang sama berlaku untuk
nvarchar
atau kursus.sumber
Mengubah ke Varchar (1200) dari Varchar (200) seharusnya tidak menimbulkan masalah karena ini hanya perubahan metadata dan karena SQL server 2008 memotong ruang kosong yang berlebihan, Anda seharusnya tidak melihat perbedaan kinerja, jadi singkatnya seharusnya tidak ada masalah dengan membuat perubahan.
sumber
Alasan lain mengapa Anda harus menghindari konversi kolom menjadi varchar (max) adalah karena Anda tidak dapat membuat indeks pada kolom varchar (max).
sumber
Dalam kasus saya, kolom perubahan tidak berfungsi sehingga seseorang dapat menggunakan perintah 'Ubah', seperti:
mengubah tabel [nama_tabel] MENGUBAH kolom [nama_kolom] varchar (1200);
sumber