Changer la longueur maximale d'une colonne varchar?


188

J'essaie de mettre à jour la longueur d'une colonne varchar de 255 caractères à 500 sans perdre le contenu. J'ai déjà supprimé et recréé des tables, mais je n'ai jamais été exposé à l'instruction alter qui est ce que je pense que je dois utiliser pour ce faire. J'ai trouvé la documentation ici: ALTER TABLE (Transfact-SQL) mais je ne peux pas en faire la tête ou la queue.

J'ai ce qui suit jusqu'à présent (essentiellement rien malheureusement):

alter table [progennet_dev].PROGEN.LE
alter column UR_VALUE_3

Comment aborder cela? Existe-t-il une meilleure documentation pour cette déclaration (j'ai fait quelques recherches pour un exemple de déclaration mais je suis restée vide)?

Réponses:


362

Vous avez besoin

ALTER TABLE YourTable ALTER COLUMN YourColumn <<new_datatype>> [NULL | NOT NULL]

Mais n'oubliez pas de spécifier NOT NULLexplicitement si vous le souhaitez.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NOT NULL;

Si vous ne le spécifiez pas comme ci-dessous ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Ensuite, la colonne autorisera par défaut les valeurs nulles même si elle a été initialement définie comme NOT NULL. c'est-à-dire que l'omission de la spécification dans un ALTER TABLE ... ALTER COLUMNest toujours traitée comme.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL;

Ce comportement est différent de celui utilisé pour les nouvelles colonnes créées avec ALTER TABLE(ou au CREATE TABLEmoment). Là, la nullité par défaut dépend des ANSI_NULL_DFLTparamètres.


Pourriez-vous expliquer le but d'ajouter «[NOT] NULL» ici? Juste des curiosités, pourquoi votre réponse avait-elle une réponse de Mitch non?
Michael A


Ainsi, [NOT NULL] spécifie que les valeurs NULL ne peuvent pas être placées dans la colonne?
Michael A

3
@Michael - Sans les crochets, oui. Les crochets indiquent que le bit de syntaxe est facultatif. Si vous l'omettez, autoriser NULLest la valeur par défaut.
Martin Smith

1
trié :) .. ALTER COLUMN MY_COL SET DATA TYPE VARCHAR (100)
Kdean571

26

L'augmentation de la taille de la colonne avec ALTERne perdra aucune donnée:

alter table [progennet_dev].PROGEN.LE 
    alter column UR_VALUE_3 varchar(500) 

Comme le souligne @Martin, n'oubliez pas de spécifier explicitement NULL | NOT NULL


14

Vous pouvez utiliser modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");

4
C'est ce qui était déjà affiché. Y a-t-il quelque chose de nouveau que vous aimeriez partager?
Nico Haase

Cela fonctionne aussi pour MySQL et cette question est taguée [TSQL] donc elle est au mauvais endroit
jean

6
MODIFY est ce qui est nouveau. ALTER COLUMN m'a donné une erreur de syntaxe mais MODIFY COLUMN a fonctionné pour moi sans problème.
KGBird

@KGBird - parce que vous n'utilisez pas SQL Server. MODIFYest la syntaxe pour un autre système de base de données que la question était sur
Martin Smith

1

En utilisant les outils Maria-DB et DB-Navigator dans IntelliJ, MODIFY Column a fonctionné pour moi au lieu d' Alter Column


2
Qu'est-ce que ce message ajoute à la réponse fournie par @Mitch Wheat le 12 janvier 12 à 1:37?
scopchanov

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

En retard à la question - mais j'utilise Oracle SQL Developer et la réponse de @ anonymous était la plus proche mais continuait à recevoir des erreurs de syntaxe jusqu'à ce que j'édite la requête à cela.

J'espère que cela aide quelqu'un


(modifié modifier pour modifier et pas besoin de définir nom_colonne comme colonne)
Jett

0

J'avais aussi au-dessus de tout doute, ce qui a fonctionné pour moi est

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  

0

Cela a fonctionné pour moi dans db2:

alter table "JOBS"  alter column "JOB_TITLE" set  data type varchar(30);

0

Vous pouvez également enregistrer les anciennes données et créer une nouvelle table avec de nouveaux paramètres.

voir l'image

Dans SQL Server Management Studio: "votre base de données" => tâche => génère des scripts => sélectionnez un objet de base de données spécifique => "votre table" => avancé => types de données à script - schéma et données => générer

Personnellement, je l'ai fait.


-1

Pour MariaDB, utilisez la colonne de modification :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Ça va marcher.


La question concerne le serveur SQL
Martin Smith le
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.