Toevallig moest ik ongeveer 3 uur geleden iets soortgelijks doen. De tafel was 35 meter lang, hij is redelijk breed en het duurde een eeuwigheid om dit gewoon te doen:
alter table myTable add myNewColumn int not null default 0;
Dit is waar ik uiteindelijk mee begon:
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;
Deze keer, de alter table
verklaringen waren bijna onmiddellijk. Het duurde ongeveer 7-8 minuten (op een trage server) om de updatebatches uit te voeren. Ik speculeer dat SQL Server ongedaan maken genereerde in mijn oorspronkelijke query om de waarden te herstellen, maar dat had ik niet verwacht om te beginnen.
Hoe dan ook, in jouw geval zou iets soortgelijks misschien helpen. U kunt proberen een nieuwe bigint-kolom toe te voegen, de nieuwe kolom in batches bij te werken en vervolgens de beperkingen erop in te stellen.