Cambiare la lunghezza massima di una colonna varchar?


188

Sto cercando di aggiornare la lunghezza di una colonna varchar da 255 caratteri a 500 senza perdere il contenuto. Ho già eliminato e ricreato tabelle in precedenza, ma non sono mai stato esposto all'istruzione alter, che è ciò che credo di dover usare per fare questo. Ho trovato la documentazione qui: ALTER TABLE (Transfact-SQL) tuttavia non riesco a crearne la testa o la coda.

Finora ho quanto segue (essenzialmente nulla purtroppo):

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

Come posso affrontarlo? Esiste una migliore documentazione per questa affermazione là fuori (ho fatto alcune ricerche per una dichiarazione di esempio ma è risultata vuota)?

Risposte:


362

Hai bisogno

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

Ma ricorda di specificare NOT NULLesplicitamente se lo desideri.

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

Se lo lasci non specificato come di seguito ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Quindi, per impostazione predefinita, la colonna consentirà i null anche se originariamente definita come NOT NULL. cioè omettere la specifica in un ALTER TABLE ... ALTER COLUMNviene sempre considerato come.

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

Questo comportamento è diverso da quello utilizzato per le nuove colonne create con ALTER TABLE(o alla CREATE TABLEvolta). Lì la nullità predefinita dipende dalle ANSI_NULL_DFLTimpostazioni.


Potresti spiegare lo scopo di aggiungere '[NOT] NULL' qui? Solo curiosità sul perché la tua risposta fosse questa, non è Mitch?
Michael A,


Quindi [NOT NULL] specifica che i valori NULL -cannot- possono essere inseriti nella colonna?
Michael A

3
@Michael - Senza le parentesi quadre, sì. Le parentesi quadre indicano che il bit di sintassi è facoltativo. Se lo ometti, consentire NULLè l'impostazione predefinita.
Martin Smith,

1
ordinato :) :) ALTER COLUMN MY_COL SET TIPO DI DATI VARCHAR (100)
Kdean571

26

L'aumento della dimensione della colonna con ALTERnon perderà alcun dato:

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

Come sottolinea @Martin, ricordati di specificare esplicitamente NULL | NOT NULL


14

Puoi usare modify:

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

4
Questo è ciò che è già stato pubblicato. C'è qualcosa di nuovo che vorresti condividere?
Nico Haase,

Funziona anche con MySQL e questa domanda è taggata [TSQL], quindi è nel posto sbagliato
jean

6
MODIFICA è la novità. ALTER COLUMN mi ha dato un errore di sintassi ma MODIFY COLUMN ha funzionato per me senza problemi.
KGBird

@KGBird - perché non stai usando SQL Server. MODIFYè una sintassi per qualche altro sistema di database di cui la domanda era
Martin Smith,

1

Usando lo strumento Maria-DB e DB-Navigator all'interno di IntelliJ, MODIFY Column ha funzionato per me invece di Alter Column


2
Quali novità aggiunge questo post alla risposta fornita da @Mitch Wheat il 12 gennaio 12 alle 1:37?
scopchanov,

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

In ritardo alla domanda, ma sto usando Oracle SQL Developer e la risposta di @ anonymous era la più vicina ma continuavo a ricevere errori di sintassi fino a quando non ho modificato la query.

Spero che questo aiuti qualcuno


(modificato da modificare a modifica e nessuna necessità di definire nome_colonna come colonna)
Jett

0

Ho anche avuto dubbi, quello che ha funzionato per me è

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

0

Questo ha funzionato per me in db2:

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

0

In alternativa, è possibile salvare vecchi dati e creare una nuova tabella con nuovi parametri.

vedi immagine

In SQL Server Management Studio: "il tuo database" => task => generatescripts => seleziona l'oggetto database specifico => "la tua tabella" => advanced => tipi di dati da script - schema e data => generate

Personalmente l'ho fatto.


-1

Per MariaDB, utilizzare la colonna di modifica :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Funzionerà.


La domanda riguarda SQL Server
Martin Smith,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.