Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come si aggiunge una colonna NOT NULL a una tabella di grandi dimensioni in SQL Server?

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.