Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie fügen Sie einer großen Tabelle in SQL Server eine NOT NULL-Spalte hinzu?

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.