Fintanto che i tipi di dati sono in qualche modo "correlati" - sì, è assolutamente possibile farlo.
È possibile modificare un INT
in un BIGINT
- l'intervallo di valori del secondo tipo è maggiore, quindi non si corre il rischio di "perdere" alcun dato.
È possibile cambiare un VARCHAR(50)
in un VARCHAR(200)
- ancora, i tipi sono compatibili, le dimensioni si stanno ingrandendo - nessun rischio di troncare nulla.
In pratica, basta
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumn VARCHAR(200) NULL
o qualsiasi altra cosa. Finché non hai una stringa più lunga di quei 200 caratteri, starai bene. Non sei sicuro di cosa succederebbe se avessi stringhe più lunghe - la conversione fallirà con un errore, o andrà avanti e ti dirà che alcuni dati potrebbero essere stati troncati. Quindi suggerisco di provare prima questo su un copia dei dati :-)
Si diventa un po 'più complicato, se avete bisogno di cambiare un VARCHAR
a un INT
o qualcosa del genere -, ovviamente, se si dispone di valori di colonna non "adattarsi" al nuovo tipo, la conversione fallirà. Ma anche l'utilizzo di una nuova colonna "temporanea" separata non risolverà questo problema: è necessario gestire questi casi "non compatibili" in qualche modo (ignorarli, lasciare NULL lì, impostarli su un valore predefinito - qualcosa).
Inoltre, il passaggio da VARCHAR
a NVARCHAR
può risultare complicato se si dispone ad es. caratteri non europei occidentali - potresti perdere determinate voci in fase di conversione, poiché non possono essere rappresentate nell'altro formato, o la conversione "predefinita" da un tipo all'altro non funziona come previsto.
fonte
2012-05-18 09:46:49
Funziona per 'CHAR' su' VARCHAR' e riduce persino il riempimento. –
Ho problemi a passare da VARCHAR a TEXT, qualche idea? – Murilo
@Murilo: poiché 'TEXT' è già ** deprecato ** e sarà rimosso molto presto, vorrei ** NON ** modificare una colonna * in * tipo di dati' TEXT' - usare 'VARCHAR (MAX)' invece, se hai davvero bisogno di più di 8000 caratteri di dati –