Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment ajouter une colonne NOT NULL à une grande table dans SQL Server ?

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.