Ich bin auch bei meiner Arbeit auf dieses Problem gestoßen. Und meine Lösung ist entlang Nr. 2.
Hier sind meine Schritte (ich verwende SQL Server 2005):
1) Fügen Sie die Spalte mit einem Standardwert zur Tabelle hinzu:
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
2) Fügen Sie NOT NULL
hinzu Beschränkung mit dem NOCHECK
Möglichkeit. Der NOCHECK
erzwingt keine bestehenden Werte:
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
3) Aktualisieren Sie die Werte inkrementell in Tabelle:
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
-
Die Update-Anweisung aktualisiert nur maximal 3000 Datensätze. Dies ermöglicht es, gleichzeitig einen Teil der Daten zu speichern. Ich muss "MyColumn IS NULL" verwenden, da meine Tabelle keinen Sequenz-Primärschlüssel hat.
-
GO 1000
führt die vorherige Anweisung 1000 Mal aus. Dadurch werden 3 Millionen Datensätze aktualisiert. Wenn Sie mehr benötigen, erhöhen Sie einfach diese Zahl. Die Ausführung wird fortgesetzt, bis SQL Server 0 Datensätze für die UPDATE-Anweisung zurückgibt.