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)?

Michael A
la source

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.

Martin Smith
la source
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

Blé Mitch
la source
14

Vous pouvez utiliser modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");
anonyme
la source
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

Rahul Sharma
la source
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

Jett
la source
(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;  
R. Gurung
la source
0

Cela a fonctionné pour moi dans db2:

alter table "JOBS"  alter column "JOB_TITLE" set  data type varchar(30);
Mukesh
la source
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.

Vlad
la source
-1

Pour MariaDB, utilisez la colonne de modification :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Ça va marcher.

hammadshahir
la source
La question concerne le serveur SQL
Martin Smith le