sql-server - smallint - tipos de datos en sql server pdf
Cambiar el tipo de columna de ntext a varbinary(max) (3)
Tengo una tabla que tiene el campo ntext
. MSDN dice que ntext
está en desuso y sugieren otros tipos de datos:
Los tipos de datos ntext, text e image se eliminarán en una versión futura de Microsoft SQL Server. Evite utilizar estos tipos de datos en el nuevo trabajo de desarrollo y planee modificar las aplicaciones que actualmente los utilizan. Use nvarchar (max), varchar (max) y varbinary (max) en su lugar.
En mi caso particular, se decidió cambiar a varbinary(max)
. Traté de alterar la definición de la tabla pero eso no funcionó.
ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);
¿Cuáles son las posibilidades de cambiar el tipo a varbinary(max)
? Probé cambiar el tipo de ntext
-> nvarchar(max)
y luego de nvarchar(max)
-> varbinary(max)
pero eso no es posible (error: la conversión implícita del tipo de datos nvarchar (max) a varbinary (max) no es permitido).
La única solución de trabajo es agregar una nueva columna de tipo varbinary(max)
, convertir el valor existente a la nueva columna y luego soltar la columna anterior. Esto toma MUCHO MUCHO tiempo (en mi conjunto de datos de aproximadamente 15 GB, demora aproximadamente 30 minutos). Es por eso que estoy investigando otras posibilidades para lograr lo mismo (posiblemente in situ = sin mover datos y conversiones).
Agregar la columna adicional es probablemente la mejor manera de hacerlo. Estoy a favor de hacer este tipo de cosas en pasos para reducir los riesgos
- Agregue la columna varbinary (max) como anulable
- Modifique su código de inserción para rellenar ambas columnas
- En su tiempo libre, diga de la noche a la mañana, ejecute la instrucción UPDATE con un CAST
- Elimine todo el soporte de código para la columna anterior, asegúrese de que se lea la nueva columna
- Suelta la columna anterior y cambia la nueva columna para que no sea nula si es necesario
Parece que esta conversión tendrá que suceder en algún momento. Si busca, encontrará muchas personas yendo de texto a varchar (máximo) e indicando que tarda más de 20 minutos en convertirse. Mis dos centavos después de investigar durante unos minutos, así que no lo tomes como un evangelio.
Si su tabla simplemente toma inserciones, podría convertir los datos existentes en una tabla de espera y luego cambiar el nombre de las tablas para que la retención sea la producción. A continuación, mueva los datos recién creados de la tabla anterior durante el tiempo de inactividad.
El manejo de las actualizaciones hace que las cosas sean más complejas, por supuesto.
Supongo que fuiste con varbinary (max) porque tu columna ntext no contenía datos textuales. En ese caso, creo que tendrá que agregar una columna varbinary (max) separada a su tabla, luego ejecutar una operación de conversión para copiar desde el ntext a la nueva columna. A continuación, elimine la columna anterior y cambie el nombre de la nueva columna por el nombre anterior.
"La conversión implícita del tipo de datos nvarchar (max) a varbinary (max) no está permitido" significa que tendrá que ser explícito sobre la conversión.