Secara kebetulan, saya harus melakukan sesuatu yang sangat mirip sekitar 3 jam yang lalu. Mejanya 35m baris, cukup lebar, dan butuh waktu lama untuk melakukan ini:
alter table myTable add myNewColumn int not null default 0;
Inilah yang akhirnya saya lakukan:
alter table myTable add myNewColumn int null;
while 1=1
begin
update top (100000) myTable
set
myNewColumn = 0
where
myNewColumn is null;
if @@ROWCOUNT = 0 break;
end
alter table myTable alter column myNewColumn int not null;
alter table myTable add constraint tw_def_myNewColumn default (0) for myNewColumn;
Kali ini, alter table
pernyataan yang hampir instan. Butuh sekitar 7-8 menit (pada server yang lambat) untuk melakukan batch pembaruan. Saya berspekulasi bahwa SQL Server menghasilkan undo dalam kueri asli saya untuk mengembalikan nilai, tetapi saya tidak berharap itu dimulai.
Bagaimanapun, dalam kasus Anda, mungkin sesuatu yang serupa akan membantu. Anda dapat mencoba menambahkan kolom bigint baru, memperbarui kolom baru secara berkelompok, lalu mengatur batasannya.