Changer la largeur de la colonne


39

L'augmentation de la largeur d'une colonne (nvarchar) supprimera-t-elle nécessairement la table?

En d'autres termes, la largeur peut-elle être modifiée dans un environnement de production avec des utilisateurs actifs?

Je pensais que si la taille augmentait (au lieu de diminuer), cela ne poserait pas de problème.

Réponses:


52

Si vous le faites via une instruction T-SQL telle que ci-dessous, aucune suppression de table ne se produira et vous pouvez le faire en toute sécurité dans un environnement de production:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Si vous le faites via l'interface graphique de SSMS Design Table, cela dépendra du script qu'il choisira d'utiliser pour implémenter la modification. Parfois, il insère des données dans une table temporaire, supprime la table d'origine, crée une nouvelle version de cette table et la réinsère dans la nouvelle. Un moyen simple de savoir ce qu’il va faire est de cliquer sur le bouton "Générer le script" et de regarder le T-SQL qu’il prévoit d’exécuter.


1
Je pensais que même le bouton "Générer le script" lançait un avertissement indiquant que vous alliez supprimer une table avant même de vous montrer le script.
Nick Chammas

1
Cela provoque l'erreur, mais n'exécute pas le script tant que vous n'avez pas cliqué sur OK (ou exécuté ou autre) dans la fenêtre contenant le script. Vous pouvez copier le script et annuler la fenêtre qui vous montre le script.
mrdenny

mais est-ce que ça marche dit un changement de float en Decimal (n, n)?
Nishanth Shaan

Quel effet cela a-t-il si la table est répliquée? Je suppose que les tables d'abonné ne seraient pas mises à jour automatiquement?
Tmwoods

18

L'augmentation de la largeur d'une nvarcharcolonne ne nécessite pas de suppression de table. Aucune ALTER TABLEopération non plus. Pour plus de détails sur les restrictions lors de la modification des propriétés de table ou de colonne, vous pouvez consulter l' instruction ALTER TABLE .

J'ai copié les parties les plus pertinentes de la documentation ci-dessous:

Changer la taille d'une colonne

Vous pouvez modifier la longueur, la précision ou l'échelle d'une colonne en spécifiant une nouvelle taille pour le type de données de la colonne dans la clause ALTER COLUMN. Si des données existent dans la colonne, la nouvelle taille ne peut pas être inférieure à la taille maximale des données. En outre, la colonne ne peut pas être définie dans un index, sauf si la colonne est un type de données varchar, nvarchar ou varbinary et que l'index n'est pas le résultat d'une contrainte PRIMARY KEY. Voir exemple P.

Serrures et ALTER TABLE

Les modifications spécifiées dans ALTER TABLE sont immédiatement appliquées. Si les modifications nécessitent des modifications des lignes de la table, ALTER TABLE met à jour les lignes. ALTER TABLE acquiert un verrou de modification de schéma sur la table pour s'assurer qu'aucune autre connexion ne fait référence aux métadonnées de la table lors de la modification, à l'exception des opérations d'index en ligne qui nécessitent un verrou SCH-M très court à la fin. Dans une opération ALTER TABLE… SWITCH, le verrou est acquis à la fois sur les tables source et cible. Les modifications apportées à la table sont enregistrées et entièrement récupérables. Les modifications qui affectent toutes les lignes de tables très volumineuses, telles que le retrait d'une colonne ou l'ajout d'une colonne NOT NULL avec une valeur par défaut, peuvent prendre beaucoup de temps pour se terminer et générer de nombreux enregistrements de journal. Ces instructions ALTER TABLE doivent être exécutées avec le même soin que toute instruction INSERT, UPDATE,


Aussi super réponse. Mais je ne pouvais en choisir qu'un. Merci!
Fernando
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.