Mientras los tipos de datos son algo "relacionado" - sí, se puede hacer absolutamente esto.
Puede cambiar INT
a BIGINT
- el rango de valores del segundo tipo es más grande, por lo que no corre el riesgo de "perder" ningún dato.
Puede cambiar VARCHAR(50)
a VARCHAR(200)
- de nuevo, los tipos son compatibles, el tamaño es cada vez mayor - sin riesgo de truncar nada.
Básicamente, sólo tiene
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumn VARCHAR(200) NULL
o lo que sea. Siempre y cuando no tengas ninguna cadena más larga que esos 200 caracteres, estarás bien. No estoy seguro de lo que sucederá si tuviera cadenas más largas: la conversión fallará con un error o continuará diciéndole que algunos datos podrían haber sido truncados. Así que sugiero que primero intente esto en una copia de sus datos :-)
Se pone un poco más complicado si necesita cambiar una VARCHAR
a un INT
o algo por el estilo -, obviamente, si tiene valores de columna no "ajuste" en el nuevo tipo, la conversión fallará. Pero incluso el uso de una nueva columna "temporal" por separado no solucionará esto; es necesario tratar con esos casos "no compatibles" de alguna manera (ignórelos, deje NULL allí, configúrelos con un valor predeterminado, algo).
Además, cambiar entre VARCHAR
y NVARCHAR
puede ser complicado si tiene, por ejemplo, caracteres no occidentales europeos: es posible que pierda ciertas entradas en la conversión, ya que no se pueden representar en el otro formato, o la conversión "predeterminada" de un tipo al otro no funciona como se esperaba.
Funciona para 'CHAR' a' VARCHAR' e incluso recorta el relleno. –
Tengo problemas para cambiar de VARCHAR a TEXT, ¿alguna idea? – Murilo
@Murilo: dado que 'TEXT' ya está ** en desuso ** y se eliminará muy pronto, ** NO ** modificaría una columna * a * tipo de datos' TEXTO' - en su lugar, use 'VARCHAR (MAX)', realmente necesita más de 8000 caracteres de datos –