Coincidentemente, tuve que hacer algo muy similar hace unas 3 horas. La mesa tenía filas de 35 m, es bastante ancha y tardaba una eternidad en hacer esto:
alter table myTable add myNewColumn int not null default 0;
Esto es lo que terminé eligiendo:
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;
Esta vez, la alter table
Las declaraciones fueron casi instantáneas. Tomó alrededor de 7-8 minutos (en un servidor lento) hacer los lotes de actualización. Estoy especulando que SQL Server estaba generando deshacer en mi consulta original para restaurar los valores, pero no esperaba que comenzara.
De todos modos, en tu caso, tal vez algo similar ayudaría. Puede intentar agregar una nueva columna bigint, actualizar la nueva columna en lotes y luego establecer las restricciones en ella.