Thật trùng hợp, tôi đã phải làm một việc rất tương tự cách đây khoảng 3 giờ. Chiếc bàn dài 35m hàng, nó khá rộng và mất nhiều thời gian để làm việc này:
alter table myTable add myNewColumn int not null default 0;
Đây là những gì tôi đã kết thúc với:
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;
Lần này, alter table
tuyên bố gần như ngay lập tức. Mất khoảng 7-8 phút (trên máy chủ chậm) để thực hiện các đợt cập nhật. Tôi đang suy đoán rằng SQL Server đang tạo hoàn tác trong truy vấn ban đầu của tôi để khôi phục các giá trị, nhưng tôi không mong đợi điều đó bắt đầu.
Dù sao, trong trường hợp của bạn, có thể một cái gì đó tương tự sẽ hữu ích. Bạn có thể thử thêm một cột bigint mới, cập nhật cột mới theo lô, sau đó đặt các ràng buộc trên đó.