2012-01-12 11 views
110

Estoy tratando de actualizar la longitud de una columna varchar de 255 caracteres a 500 sin perder el contenido. He eliminado y vuelto a crear 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), pero no puedo entenderlo.¿Cambiar la longitud máxima de una columna varchar?

tengo el siguiente hasta el momento (esencialmente nada por desgracia):

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

¿Cómo me acerco a esto? ¿Hay mejor documentación para esta declaración (hice algunas búsquedas para un enunciado de ejemplo pero salió vacío)?

Respuesta

212

Usted necesita

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

pero recuerde que debe especificar explícitamente NOT NULL si se desea.

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

Si se deja sin especificar de la siguiente manera ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500); 

A continuación, la columna se permite por defecto en los nulos incluso si se definió originalmente como NOT NULL. es decir, omitir la especificación en un ALTER TABLE ... ALTER COLUMN siempre se trata como.

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

Este comportamiento es diferente de la utilizada para las nuevas columnas creadas con ALTER TABLE (o al CREATE TABLE tiempo). Allí, la capacidad predeterminada de anulación depende de la configuración ANSI_NULL_DFLT.

+0

Podría explicar el propósito de añadir '[NO] NULL' aquí ? ¿Por qué tu respuesta fue tan simple como la de Mitch? – Codingo

+0

@MitchWheat - ["ANSI_NULL está predeterminado para ALTER COLUMN; si no se especifica, la columna es anulable."] (Http://msdn.microsoft.com/en-us/library/ms190273.aspx) –

+0

Entonces [ NOT NULL] especifica que los valores NULL -no se pueden ubicar en la columna? – Codingo

16

El aumento de tamaño de la columna con ALTER no se perderán los datos:

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

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

Cuestiones relacionadas