Narazil jsem na tento problém pro svou práci také. A moje řešení je podél #2.
Zde jsou mé kroky (používám SQL Server 2005):
1) Přidejte sloupec do tabulky s výchozí hodnotou:
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
2) Přidejte NOT NULL
omezení pomocí NOCHECK
volba. NOCHECK
nevynucuje na existujících hodnotách:
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
3) Aktualizujte hodnoty postupně v tabulce:
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
-
Aktualizační prohlášení aktualizuje pouze maximálně 3000 záznamů. To umožňuje současně uložit velké množství dat. Musím použít "MyColumn IS NULL", protože moje tabulka nemá sekvenční primární klíč.
-
GO 1000
provede předchozí příkaz 1000krát. Tím se aktualizují 3 miliony záznamů, pokud potřebujete více, zvyšte toto číslo. Bude pokračovat, dokud SQL Server nevrátí 0 záznamů pro příkaz UPDATE.