Z tym problemem spotkałem się również w mojej pracy. A moje rozwiązanie jest w punkcie 2.
Oto moje kroki (używam SQL Server 2005):
1) Dodaj kolumnę do tabeli z wartością domyślną:
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
2) Dodaj NOT NULL
ograniczenie z NOCHECK
opcja. NOCHECK
nie wymusza na istniejących wartościach:
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
3) Zaktualizuj wartości stopniowo w tabeli:
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
-
Oświadczenie o aktualizacji zaktualizuje maksymalnie 3000 rekordów. Pozwala to na zapisanie porcji danych w tym samym czasie. Muszę użyć „MyColumn IS NULL”, ponieważ moja tabela nie ma klucza podstawowego sekwencji.
-
GO 1000
wykona poprzednią instrukcję 1000 razy. To zaktualizuje 3 miliony rekordów, jeśli potrzebujesz więcej, zwiększ tę liczbę. Będzie kontynuowane, dopóki SQL Server nie zwróci 0 rekordów dla instrukcji UPDATE.