¿Cambiar la longitud máxima de una columna varchar?

188

Estoy tratando de actualizar la longitud de una columna varchar de 255 caracteres a 500 sin perder el contenido. He descartado y recreado tablas antes, pero nunca he estado expuesto a la declaración alter, que es lo que creo que necesito usar para hacer esto. Encontré la documentación aquí: ALTER TABLE (Transfact-SQL), sin embargo, no puedo entenderlo.

Tengo lo siguiente hasta ahora (esencialmente nada desafortunadamente):

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

¿Cómo me acerco a esto? ¿Existe una mejor documentación para esta declaración (hice algunas búsquedas para una declaración de ejemplo pero salí vacía)?

Michael A
fuente

Respuestas:

362

Necesitas

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

Pero recuerde especificar NOT NULLexplícitamente si lo desea.

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

Si lo deja sin especificar como a continuación ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Luego, la columna permitirá de forma predeterminada los valores nulos, incluso si se definió originalmente como NOT NULL. es decir, omitir la especificación en un ALTER TABLE ... ALTER COLUMNsiempre se trata como.

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

Este comportamiento es diferente del utilizado para las nuevas columnas creadas con ALTER TABLE(o en el CREATE TABLEmomento). Allí la nulabilidad predeterminada depende de la ANSI_NULL_DFLTconfiguración.

Martin Smith
fuente
¿Podría explicar el propósito de agregar '[NOT] NULL' aquí? ¿Solo curiosidades por qué tu respuesta tenía esto y Mitch no?
Michael A
¿Entonces [NOT NULL] especifica que los valores NULL -no se pueden- colocar en la columna?
Michael A
3
@ Michael - Sin los corchetes, sí. Los corchetes indican que el bit de sintaxis es opcional. Si lo omite, permitir NULLes el valor predeterminado.
Martin Smith
1
lo ordené :) .. ALTER COLUMN MY_COL SET DATA TYPE VARCHAR (100)
Kdean571
26

El aumento del tamaño de la columna con ALTERno perderá ningún dato:

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

Como señala @ Martin, recuerde especificar explícitamente NULL | NOT NULL

Trigo Mitch
fuente
14

Puedes usar modify :

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");
anónimo
fuente
44
Eso es lo que ya se publicó. ¿Hay algo nuevo que te gustaría compartir?
Nico Haase
También funciona para MySQL y esta pregunta está etiquetada [TSQL] por lo que está en el lugar equivocado
jean
66
MODIFICAR es lo nuevo. ALTER COLUMN me dio un error de sintaxis, pero MODIFY COLUMN funcionó para mí sin problemas.
KGBird
@KGBird: porque no estás usando SQL Server. MODIFYes la sintaxis para otro sistema de base de datos que no era la pregunta
Martin Smith
1

Usando la herramienta Maria-DB y DB-Navigator dentro de IntelliJ, MODIFY Column funcionó para mí en lugar de Alter Column

Rahul Sharma
fuente
2
¿Qué novedades agrega esta publicación a la respuesta proporcionada por @Mitch Wheat el 12 de enero de 12 a las 1:37?
scopchanov
1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

Tarde a la pregunta, pero estoy usando Oracle SQL Developer y la respuesta de @ anonymous fue la más cercana, pero seguí recibiendo errores de sintaxis hasta que edité la consulta.

Espero que esto ayude a alguien

Jett
fuente
(cambiado, alter para modificar y no es necesario definir column_name como columna)
Jett
0

También tenía dudas, lo que funcionó para mí es

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  
R. Gurung
fuente
0

Esto funcionó para mí en db2:

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

Como alternativa, puede guardar datos antiguos y crear una nueva tabla con nuevos parámetros.

ver imagen

En SQL Server Management Studio: "su base de datos" => tarea => genera scripts => seleccione un objeto de base de datos específico => "su tabla" => avanzado => tipos de datos a scripts - esquema y datos => generar

Personalmente lo hice.

vlad
fuente
-1

Para MariaDB, use la columna modificar :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Funcionará.

hammadshahir
fuente
La pregunta es sobre el servidor SQL
Martin Smith