J'ai besoin de changer une colonne de NOT NULL à NULL dans une table qui contient des millions de lignes. J'ai essayé un simple
alter table Table1 ALTER COLUMN Column1 XML NULL
mais cela prend une éternité. Donc, voici mes questions:
- Pourquoi faut-il autant de temps pour appliquer l'alter?
- Y a-t-il une meilleure façon de le faire?
la source
sp_rename
.Chaque ligne doit être touchée lors du changement de la colonne de NOT NULL à NULL, c'est pourquoi cela prend tellement de temps à terminer. Il n'y a aucun moyen de faire en sorte que cela prenne moins de temps.
la source
Une autre option consiste à créer une nouvelle colonne avec une définition correcte pour la table en question, à mettre à jour la colonne avec les données de l'ancienne colonne, puis à supprimer l'ancienne colonne.
Ou vous pouvez vous référer à un article plus ancien de SE qui traite un problème similaire sur une colonne INT.
/programming/4311559/sql-server-performance-for-alter-table-alter-column-change-data-type
la source
Si vous ouvrez le moniteur d'activité SQL pendant que la commande est en cours d'exécution, vous serez en mesure de dire si elle le traite réellement ou si elle attend une forme de verrouillage exclusif de la table.
la source