Ho riscontrato questo problema anche per il mio lavoro. E la mia soluzione è lungo #2.
Ecco i miei passaggi (sto usando SQL Server 2005):
1) Aggiungi la colonna alla tabella con un valore predefinito:
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
2) Aggiungi un NOT NULL
vincolo con il NOCHECK
opzione. Il NOCHECK
non si applica ai valori esistenti:
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
3) Aggiorna i valori in modo incrementale nella tabella:
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
-
La dichiarazione di aggiornamento aggiornerà solo un massimo di 3000 record. Ciò consente di salvare un pezzo di dati alla volta. Devo usare "MyColumn IS NULL" perché la mia tabella non ha una chiave primaria di sequenza.
-
GO 1000
eseguirà l'istruzione precedente 1000 volte. Questo aggiornerà 3 milioni di record, se ne hai bisogno di più aumenta questo numero. Continuerà a essere eseguita finché SQL Server non restituisce 0 record per l'istruzione UPDATE.