J'ai aussi rencontré ce problème pour mon travail. Et ma solution est #2.
Voici mes étapes (j'utilise SQL Server 2005):
1) Ajoutez la colonne au tableau avec une valeur par défaut :
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
2) Ajouter un NOT NULL
contrainte avec le NOCHECK
option. Le NOCHECK
ne s'applique pas aux valeurs existantes :
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
3) Mettez à jour les valeurs de manière incrémentielle dans le tableau :
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
-
L'instruction de mise à jour ne mettra à jour que 3000 enregistrements au maximum. Cela permet de sauvegarder un bloc de données à la fois. Je dois utiliser "MyColumn IS NULL" car ma table n'a pas de clé primaire de séquence.
-
GO 1000
exécutera l'instruction précédente 1000 fois. Cela mettra à jour 3 millions d'enregistrements, si vous avez besoin de plus, augmentez simplement ce nombre. Il continuera à s'exécuter jusqu'à ce que SQL Server renvoie 0 enregistrement pour l'instruction UPDATE.