Jag stötte på det här problemet för mitt arbete också. Och min lösning är längs #2.
Här är mina steg (jag använder SQL Server 2005):
1) Lägg till kolumnen i tabellen med ett standardvärde:
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
2) Lägg till en NOT NULL
begränsning med NOCHECK
alternativ. NOCHECK
tillämpar inte befintliga värden:
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
3) Uppdatera värdena stegvis i tabellen:
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
-
Uppdateringssatsen kommer endast att uppdatera maximalt 3000 poster. Detta gör det möjligt att spara en bit data åt gången. Jag måste använda "MyColumn IS NULL" eftersom min tabell inte har en sekvensprimärnyckel.
-
GO 1000
kommer att köra föregående sats 1000 gånger. Detta kommer att uppdatera 3 miljoner poster, om du behöver fler är det bara att öka detta antal. Det kommer att fortsätta att köras tills SQL Server returnerar 0 poster för UPDATE-satsen.