Shodou okolností jsem asi před 3 hodinami musel udělat něco velmi podobného. Stůl měl 35 m řádků, byl poměrně široký a trvalo věčnost, než se to povedlo:
alter table myTable add myNewColumn int not null default 0;
Zde je to, s čím jsem skončil:
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;
Tentokrát alter table
prohlášení byla téměř okamžitá. Provedení aktualizačních dávek trvalo asi 7-8 minut (na pomalém serveru). Domnívám se, že SQL Server generoval v mém původním dotazu příkaz zpět, aby obnovil hodnoty, ale neočekával jsem, že to začne.
Každopádně ve vašem případě by možná pomohlo něco podobného. Můžete zkusit přidat nový bigintový sloupec, aktualizovat nový sloupec v dávkách a poté na něj nastavit omezení.